私のアプリケーションでjavax.websocket APIを使用しています。私はこのように、サーバからクライアントへのメッセージを送信する:javax.websocket - メッセージ配信のタイムアウト
Future<Void> messageFuture = session.getAsyncRemote().sendText(message);
messageFutures.add(messageFuture); // List<Future<Void>> messageFutures
私は本当にパフォーマンスを気にして、各メッセージが配信されるまで、サーバーを待機させることができないため、サーバーは次のようになめらかにないので、私は、非同期APIを使用します。
for (i = 1..N) {
result = doStuff()
sendMessage(result)
}
したがって、繰り返しごとにメッセージ配信を待つことはできません。
私はすべてのメッセージを送った後、私はFuture
が完了するのを待つ必要があります(すべてのメッセージが配信されます)。そして、安全のためには、「サーバがクライアントにメッセージを送信し、クライアントが30秒後に領収書を確認せず、WebSocketの接続が壊れていると思うようなタイムアウトを使用する必要があります」 - 私はWebSocket TCPで作業します。このセッションの前にミリ秒単位の非ゼロの数を設定し
それがアクティブでない場合、コンテナによって を閉鎖される、何もメッセージが送信または受信のどちらか ません。すなわち:
は方法
session.setMaxIdleTimeout(long)
あります。 0または負の値は、非アクティブなためにセッション が決してタイムアウトしないことを示します。
しかし、私が望むものであるかどうかは本当に分かりません(それは?)。では、javax.websocket APIを使用して説明したように、どのようにタイムアウトを設定できますか?
ありがとうございました!これがまさに私が必要としているようだ、 'ContainerProvider.getWebSocketContainer()。setAsyncSendTimeout(30_000)'のようなスムージーは、そのことをすべきである。幸いにも(またはそうでない)私のアプリはSpring上に構築されていません – coolguy