2015-11-25 40 views
7

在这个很好的回答https://stackoverflow.com/a/27161986/4358405中有一个如何在没有STOMP子协议的情况下使用原始Spring4 WebSocket(并且没有潜在的SockJS)的例子。如何使用未使用STOMP的原始Spring 4 WebSockets广播消息?

现在我的问题是:如何向所有客户进行广播?我希望看到我能以类似的方式与纯粹的JSR 356米的WebSockets API的使用API​​:session.getBasicRemote().sendText(messJson);

我需要让我自己都WebSocketSession对象,然后调用每个人sendMessage()

+0

嗨,您有同样的问题:我如何向所有客户进行广播?你有这个答案吗?感谢您的帮助。 –

回答

1

据我所知,可以从文档here收集,你不能使用WebSocketHandler广播。

相反,您应该使用Stomp而不是WebSocket,该值由所述的WebSocketMessageBrokerConfigurer配置。

在代码中使用将消息发送到订阅的客户端描述here

+1

“你不能这样做”是什么意思?我不能使用广播API,因为它不存在,或者我不能保留'List ',因为我还没有意识到其他一些影响? – TMG

+0

希望我的编辑能帮助你更好@TMG –

+0

我试过SimpMessagingTemplate,但它不能发送,没有错误,请帮忙 –

4

我找到了一个解决方案SimpMessagingTemplate任何地方。在WebSocket处理程序中,我们管理WebSocketSession的列表并在afterConnectionEstablished函数上添加新会话。

private List<WebSocketSession> sessions = new ArrayList<>(); 

synchronized void addSession(WebSocketSession sess) { 
    this.sessions.add(sess); 
} 

@Override 
public void afterConnectionEstablished(WebSocketSession session) throws Exception { 
    addSession(session); 
    System.out.println("New Session: " + session.getId()); 
} 

当我们需要广播,只是通过所有的会话列表中列举会议和发送消息。

for (WebSocketSession sess : sessions) { 
     TextMessage msg = new TextMessage("Hello from " + session.getId() + "!"); 
     sess.sendMessage(msg); 
} 

希望得到这个帮助!

+0

我知道这个解决方案 - 这看起来完全像我已经实现的解决方案在我的问题中提到。我宁愿想知道它是否有缺点,还有更好的方法,或者这实际上是最好的解决方案。 – TMG

+0

那么你用@TMG提出什么解决方案?我在这里做同样的解决方案,它为你工作正常吗? –

+0

@SepehrGH那时我没有找到更好的东西。我没有遇到这个解决方案的任何特殊问题,但不要把它当作我的支持。我很快就停止了该项目的工作,并且我无法确定它是否工作良好。 – TMG

相关问题