JavaEEで構築中のWebSocketサービスで、下りメッセージの送信順を保証しようとしています。
さて、下りメッセージは何らかのクライアントからの上りメッセージを起点として発生するため、送信のプログラミングの仕方は以下の二通りが考えられます。
- 送信先ごとのキューを用意し、キューごとに送信スレッドを立て、送信スレッドがキューから同期的に(getBasicRemote().sendBinary()で)送信していく
- 下りメッセージを発生させたスレッドがそのまま非同期的に(getAsyncRemote().sendBinary()で)送信(を予約)する
前者の方式ならば、送信順が保証されていることは明らかです。ただ、サーブレットプログラミングの常識として開発者が自分でスレッドを立てることはフレームワークの想定外で好ましくないとされてもいます。クライアントが増えたら送信スレッドもその数だけ増えてしまいますし。
そこで後者の非同期送信なのですが、このとき送信順、つまりsendBinaryを呼んだ順に送られることは保証されるのでしょうか?
ドキュメントからそれらしき記述をどうしても見つけられず⋯
あなたの回答
tips
プレビュー