アクティブなすべてのクライアントにメッセージを送信したい。
@OnMessage
public void onMessage(String message, Session session) {
switch (message) {
case "latencyEqualize":
for (Session otherSession : session.getOpenSessions()) {
RemoteEndpoint.Basic other = otherSession.getBasicRemote();
String data = "Max latency = "
+ LatencyEqualizer.getMaxLatency(latencies);
try {
other.sendText(data);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
break;
default:
RemoteEndpoint.Basic other = session.getBasicRemote();
try {
other.sendText(message);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
このコードには何か問題があります。最初のクライアントからメッセージ「latencyEqualize」を送信すると、サーバーは同じクライアントにのみ応答します。他のクライアントは、「Max latency = 15」というメッセージを受信しません。しかし、2 番目のクライアントがサーバーにメッセージを送信すると、"Max latency = 15" が返されます。そして、サーバーへの今後のすべての呼び出しは、前の呼び出しからのメッセージを返します。
これを回避する方法はありますか。いずれかのクライアントが「latencyEqualize」メッセージをサーバーに送信すると、すべてのクライアントが「Max latency」メッセージを受け取るようにします。