Tomcat 8のJSR-356 WebSocketサポートを使用して、私が取り組んでいるアプリケーションを駆動しています。これまでは、すべてのメッセージが1つのスレッドで処理されるように見えました。私はこの背後にある理由を理解していますが、WebSocketがこのように実装されている理由を理解していますが、ExecutorService
を使用して(メッセージにExecutorServiceを作成せずに)メッセージを処理する方法はありますか?Tomcat 8 JSR 356 WebSocketスレッディング
これは、実際のメッセージの標準的なスレッドベースの処理を可能にする一方で(1つまたは少数の)ネットワークセレクタスレッド(接続された多数のクライアントをサポートする)をスケーラビリティできるようにしますクライアントのために処理される)。
特にこれが変更されることはありません。
スレッドプールを使用して着信データを処理すると言っていますか?クライアントごとに最大1つのスレッドがありますか? –
私がテストしていたときに、2番目のメッセージが最初に処理を完了するのを待っているように見えたので、私は尋ねます。しかし、私たちはどちらも同じセッションから送られてきました(たぶんそれが理由でした)。サイドノート:偉大な答え –
クライアントごとにデータを処理するために割り当てるスレッドは複数ありません。クライアントが複数のメッセージを送信した場合、クライアントは同じスレッドによって順次処理されます。スレッドが最初のメッセージを終了すると、読み取るデータがさらにあることがわかります。もしあれば、それを読むでしょう。そうでない場合、ソケットはセレクタ/ポーラーにデータが到着するまで戻る。このようにデータを処理する必要があります。より多くのスレッドのスコープがある場合、メッセージ(または部分的なメッセージ)がアプリケーションに渡される準備ができたら、それは新しいスレッドで行うことができます(ただしそうではありません)。 –