2014-12-13 353 views
3

我想向所有活动客户端发送消息。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”消息时,所有客户端都会收到“Max latency”消息。

回答

4

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

如果将信息发送到所有客户端,存储它们的连接部分集合(例如,ArrayList<Session>)在onOpen()方法,然后遍历尽管这集让所有的客户

+0

HTTP的连接:// WWW .byteslounge.com /教程/ java的EE-HTML5-的WebSockets与 - 多客户端 - 例如 – KevinO 2016-01-14 19:01:23

相关问题