Spring WebSocket:向用户广播消息

时间:2019-01-22 14:46:40

标签: java spring spring-boot spring-websocket

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

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

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

结果,WebSocket协议现在看起来确实非常有用:该请求仍然由用户(确切地说是由用户的浏览器)发起。唯一的优点是您不必在每次要检索新统计信息时都打开新连接。

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

1 个答案:

答案 0 :(得分:1)

您可以将simpMessagingTemplate.convertAndSendToUser(username, "/destination", message); 注入任何spring bean并将消息发送给用户。

SimpUserRegistry

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

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

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