2

ローカルホストで実行されているクライアントとサーバーの両方で合成負荷を使用して、tcpdump と netstat を介して、クライアントがサーバーに FIN パケットを送信していることを確認しましたが、要求がサーバーでキューに入れられたままになっている間、接続は CLOSE_WAIT でスタックします (キューに入れられたスレッドプールで Jetty を使用しています)。プールでワーカー スレッドが使用可能な場合、接続がクライアントによって既に閉じられていても、要求は通常どおりサーブレットによって処理されます。

私が望むのは、サーバーがクライアント側で既にタイムアウトした要求を処理するのを防ぐために、接続が既に閉じられているかどうかをテストする方法です (クライアントにタイムスタンプを使用して http ヘッダーを設定し、これを確認できることを知っています)クロックが同期している限りサーバーに接続しますが、接続がまだ開いているかどうかを確認することをお勧めします)。

私がやろうとしていることは可能ですか?

4

1 に答える 1

2

私はそうは思わない。FIN は、接続が切断されたことを意味するものではありません。A が B に何らかのデータを送信し、その後に FIN を送信することは完全に有効です。その後、A は B から読み取りを続けます。この半分閉じた状態に問題はありません。

より良い選択は、サーバーのスループットを向上させて、クライアントが長時間待機する必要がないようにすることです。

于 2013-03-07T01:55:19.993 に答える