この回答では、Jetty 9 WebSockets について説明しています。
1 があり、新しい接続WebSocketClient
を確立するための呼び出しごとにブラウザと考えてください。connect()
への各呼び出しにconnect()
は新しい WebSocket インスタンスが必要です。各インスタンスは WebSocketClient によって管理され、Executor
本質的に各 WebSocket インスタンスが独自のスレッドになります。
フォローアップの回答
理想的には、WebSocketClient を 1 つだけ持ち、1 回だけ開始します。アクティブな websocket 接続がある間は開始したままにしておきます。接続がなくなったら WebSocketClient を停止します。
一般的に言えば、何をしているのかわからない限り、複数のリクエストでオブジェクトを再利用することは避けてください。例: ClientUpgradeRequest と URI は WebSocket セッションに関連付けられており、複数の接続で再利用された場合、最初の接続の終了時に状態が変化し、他の接続ではデータが無効になり、ガベージ コレクションの参照もあります。すべての接続が閉じられるまで、古い接続のクリーンアップが困難になります。
connect()
同時に呼び出すことができます。各接続の試行は、Executor の動作に基づいて処理されます (例: シングルスレッドの Executor がある場合、一度に 1 つの接続のみが発生します)。
接続ごとに新しい WebSocketClient を作成すると、リソースが過度に浪費されます。これは、着信要求ごとに WebServer 全体を開始するようなものです。WebSocketClient は、セレクター、スレッド化、セッション トラッキングなどを管理します。古い http クライアント ライブラリがこの動作をしていることから、あなたがどこから来たのかはわかりますが、spdy と http のおかげで、それらの http クライアントでさえ、この新しいブラウザー風のモデルに更新されています。 /2.