Spring WebSocket:向用户广播消息

Spring WebSocket: broadcasting messages to users

我正在实现一个简单的 Spring 引导应用程序,它有一定数量的用户通过 WebSocket 协议连接。该应用程序每 5 秒向每个用户发送一次个人统计信息。

我正在使用 @SendToUser 注释来区分用户和个性化统计信息。

在我看来,用@SendToUser注释的方法只能用作消息处理方法。这意味着为了接收统计信息,用户应该首先将消息发送到Spring引导应用程序,然后调用消息处理方法,然后才统计数据将发回。

因此,WebSocket 协议现在看起来确实非常有用:请求仍然是由用户(准确地说是用户的浏览器)发起的。唯一的好处是你不应该每次想要检索新的统计数据时都打开新的连接。

是否可以完全删除从用户发送到应用程序的消息?例如,每 5 秒检索一次当前连接的用户列表,然后遍历列表并将消息一一发送给每个用户?或者用户仍然需要启动统计检索?

您可以将 SimpMessagingTemplate 注入任何 spring bean 并向用户发送消息。

simpMessagingTemplate.convertAndSendToUser(username, "/destination", message);

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/messaging/simp/SimpMessagingTemplate.html

您可以通过注入 SimpUserRegistry bean 来检索已连接用户的列表。

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/messaging/simp/user/SimpUserRegistry.html