如何在没有STOMP的情况下使用原始Spring 4 WebSockets广播消息?

时间:2015-11-25 07:21:56

标签: spring websocket spring-4

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

现在我的问题是:我如何向所有客户广播?我期望看到一个API,我可以使用与纯JSR 356 websockets API类似的API:session.getBasicRemote().sendText(messJson);

我是否需要自己保留所有WebSocketSession个对象,然后在每个对象上调用sendMessage()

2 个答案:

答案 0 :(得分:4)

我找到了解决方案。在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);
}

希望这有帮助!

答案 1 :(得分:1)

据我所知并可以从文档here收集,您无法使用WebSocketHandler进行广播。

相反,您应该Stomp使用WebSocket WebSocketMessageBrokerConfigurer配置SimpMessagingTemplate,如here所述。

在代码中的任意位置使用cannot resolve getSharedPreferences(java.lang.String, int),按照here

所述向订阅的客户发送消息