我想向所有活跃的客户发送消息。
@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"从第一个客户端,服务器只回答同一个客户端。其他客户没有收到消息"最大延迟= 15"。但是当第二个客户端向服务器发送任何消息时,他会收到" Max latency = 15"。以后对服务器的所有呼叫都会从之前的呼叫中返回消息。
有没有办法避免这种情况。我希望所有客户都获得"最大延迟"当其中一个发送" latencyEqualize"消息到服务器。
答案 0 :(得分:5)
只有一个客户端收到您的消息的原因是session
变量仅包含向您发送消息的客户端的连接。
要将消息发送到所有客户端,请将他们的连接存储在ArrayList<Session>
方法中的某个集合中(例如,onOpen()
),然后迭代该集合以获取所有客户端的连接< / p>