0

gwan がいくつかの要求に応答しないようにする方法、つまり、ビルドして応答を送信せずにサーブレットを静かに閉じるにはどうすればよいですか?

サーバー側からの送信帯域幅を減らすと便利です。

データを収集するだけの場合は、クライアントに応答する必要はありません。

4

2 に答える 2

0

あなたはgwanでそれを行うことができますconnection handler

これは、ハンドラーでキャッチする必要があるイベントだと思います。サーブレットを実行したいので、後で接続を閉じます。

HDL_BEFORE_WRITE, // after a reply was built, but before it is sent

のサンプルコードは次のとおりですconnection handler。フィルタを追加する必要があります。このコードは、応答が作成された後にすべてのリクエストを閉じます。

int init(int argc, char *argv[])
{ 
   u32 *states = (u32*)get_env(argv, US_HANDLER_STATES);
   *states =  (1 << HDL_BEFORE_WRITE)
}

int main(int argc, char *argv[])
{
    long state = (long)argv[0];
    if(state == HDL_BEFORE_WRITE)
    {
        return 0; // Close connection
    }
    return(255); // continue G-WAN's default execution path
}
于 2012-11-08T15:24:02.847 に答える
0

次のようなことを行うことで、サーブレットからの接続を閉じることもできます (未テスト):

#include <sys/socket.h>

char buf[1024];
int s = (int)get_env(argv, CLIENT_SOCKET);
shutdown(s, SHUT_WR);
while(read(s, buf, sizeof(buf)) > 0);
close(s);
return 500;

次に、上記のように 500 などを返すと、返信を作成する必要がなくなります。

于 2012-11-08T16:39:25.297 に答える