1

私はHTTPに不慣れで、アプリケーションプロキシを開発しています。操作のタイムアウトを定義するのを避け、代わりにクライアントに依存して接続を閉じたいと思います。これが可能かどうか疑問に思いますか?

これは非常に唖然とした擬似コードです

void handle_request(Request http_request, Response http_response)
{
   string modified_request = parse(http_request);
   response_from_server = remote_server->send_request(modified_request);
   while(true) {
     if(response_from_server ->wait_for_data(1000 /* milliseconds */)) {
       http_response->write_data(response_from_server->read_data());
       continue;
     }

     if(!http_response.check_if_the_client_connection_to_me_is_still_active()) // how to do this?
         return;
     }
   }
}

これを尋ねる別の方法は次のとおりです。

  1. HTTPプロキシで、別のタイムアウトを追加せずに、リモートcilentとリモートサーバーからのタイムアウトを使用できますか?
  2. リモートサーバーまたはリモートクライアントのいずれかがタイムアウトしたことを検出するにはどうすればよいですか?

ちなみに、私はPocoを使用してC++で開発しています。

4

1 に答える 1

1

タイムアウトを使用せずに本格的なTCPアプリケーションを作成することはできません。場合によっては、読み取り中に切断された接続を検出できる唯一の方法です。TCPは、切断された接続を検出するために次の方法を提供します。

  1. 読み取り時のさまざまなEOS条件。
  2. 書き込み時または時折読み取り時に「接続リセット」。
  3. 読み取りタイムアウト。

それでおしまい。もうありません。

また、TCPキープアライブを最後から有効にする必要がありますが、それは2時間後にのみ開始されます。

于 2012-05-25T01:09:34.843 に答える