我正在实现一个简单的 Spring Boot 应用程序,该应用程序具有通过 WebSocket 协议(protocol)连接的一定数量的用户。该应用程序每 5 秒向每个用户发送个人统计信息。
我使用@SendToUser
注释来区分用户并个性化统计信息。
在我看来,用@SendToUser
注释的方法只能用作消息处理方法。这意味着为了接收统计信息,用户应该首先将消息发送到 Spring Boot 应用程序,然后调用消息处理方法,然后才将统计信息发送回。
因此,WebSocket 协议(protocol)现在看起来确实非常有用:请求仍然由用户发起(准确地说是由用户的浏览器发起)。唯一的优点是您不应该在每次想要检索新统计信息时都打开新连接。
是否可以完全删除从用户发送到应用程序的消息?例如,每隔5秒检索一次当前连接的用户列表,然后迭代该列表并将消息一一发送给每个用户?或者用户仍然需要发起统计检索?
最佳答案
您可以将 SimpMessagingTemplate
注入(inject)任何 Spring bean 并向用户发送消息。
simpMessagingTemplate.convertAndSendToUser(username, "/destination", message);
您可以通过注入(inject) SimpUserRegistry
bean 来检索已连接用户的列表。
关于java - Spring WebSocket : broadcasting messages to users,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54310757/