如何在不使用 STOMP 的情况下使用原始 Spring 4 WebSocket 广播消息?

问题描述 投票:0回答:2

在这个很棒的答案中https://stackoverflow.com/a/27161986/4358405有一个示例,说明如何在没有STOMP子协议(并且可能没有SockJS)的情况下使用原始Spring4 WebSockets。

现在我的问题是:如何向所有客户端广播?我希望看到一个可以与纯 JSR 356 websockets API 类似的方式使用的 API:

session.getBasicRemote().sendText(messJson);

我是否需要保留所有

WebSocketSession
对象,然后对每个对象调用
sendMessage()

spring websocket spring-4
2个回答
6
投票

我找到了解决办法。在 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());
}

当我们需要广播时,只需枚举列表sessions中的所有会话并发送消息即可。

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

希望这有帮助!


0
投票

据我所知并且可以从文档中收集这里你不能使用

WebSocketHandler
进行广播。

相反,您应该使用

Stomp
而不是由
WebSocket
配置的
WebSocketMessageBrokerConfigurer
,如此处所述。

在代码中的任意位置使用

SimpMessagingTemplate
向订阅的客户端发送消息,如此处

所述
© www.soinside.com 2019 - 2024. All rights reserved.