3

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

@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”。但是当第二个客户端向服务器发送任何消息时,他会收到“最大延迟 = 15”。并且将来对服务器的所有调用都返回先前调用的消息。

有没有办法避免这种情况。当其中一个客户端向服务器发送“latencyEqualize”消息时,我希望所有客户端都收到“最大延迟”消息。

4

1 回答 1

10

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

要将您的消息发送给所有客户端,请将它们的连接存储在方法中的某个集合(例如,ArrayList<Session>)中onOpen(),然后遍历该集合以获取所有客户端的连接

于 2015-07-08T12:11:58.227 回答