websocket从服务器向所有客户端发送消息

时间:2014-12-13 13:35:47

标签: java java-websocket

我想向所有活跃的客户发送消息。

@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"消息到服务器。

1 个答案:

答案 0 :(得分:5)

只有一个客户端收到您的消息的原因是session变量仅包含向您发送消息的客户端的连接。

要将消息发送到所有客户端,请将他们的连接存储在ArrayList<Session>方法中的某个集合中(例如,onOpen()),然后迭代该集合以获取所有客户端的连接< / p>