2

基本的に、2回目の接続が行われるまで接続を保持し、最初の接続の保持を停止するように指示するサービスを作成したいと思います。

すべてのデフォルト設定(Tomcatおよびコネクタ)でのNIOHttpコネクタの使用。

スレッド(tomcat aio docの「messageSender」クラスによく似ています)を使用して、最初の応答を保持し、5秒ごとに文字を書き込み/フラッシュします。これは正常に機能しています。スレッドがそれを保持し、キューで解放します。唯一の問題は、最初の接続を閉じるまで、サービス('event'メソッド)が(2番目の接続の'begin'イベントに対して)2番目の呼び出しを受け取らないことです。

繰り返しますが、これが起こることです:

接続1->tomcatは、myService.event(event);を呼び出すスレッド'http-nio-8081-exec-2'を作成します。

myService.eventは、「myDaemonThread」への応答を提供します(これは参照を保持し、5秒ごとに応答に書き込みます)。メソッドを終了します。

'myDaemonThread'は、待機に "synchronized(this){this.wait(5000);}"を使用します(最初はThread.sleep()を使用していましたが、これを機能させるために、wait()に変更しました)

接続2->開始されましたが、myService.eventを呼び出すスレッドがありません

接続1がブラウザで停止すると、TomcatはmyService.event(event.END)を呼び出すスレッド「http-nio-8081-exec-4」を作成します。メソッドを終了します。

tomcat(現在または以前に??を作成し、わかりません)スレッド'http-nio-8081-exec-6'は、接続2に対してmyService.event(event.BEGIN)を呼び出します。

......残りは重要ではありません。

だから、これはNIOを使用する目的全体を打ち負かすようです...誰かがこれが起こっている理由を知っていますか?

4

1 に答える 1

1

考えられる理由

  1. Tomcat は、同じクライアントからの 2 つの同一のリクエストを同時に許可していません
  2. クライアントは、「舞台裏」で同一のリクエストをキューに入れます。

いずれにしても、2 番目の要求のクライアントを変更すると、すべてが正常に機能しました。同じクライアントの 2 番目のリクエストにジャンク パラメータを追加すると、問題なく動作しました。

解決

リクエストにジャンク パラメータを追加する

于 2012-05-01T06:48:16.813 に答える