Spring Boot + Websocket(SockJS)

我正在尝试创建一个服务器,以便在发生更改时通知已连接的客户端。 为此,我使用Spring Boot作为服务器。 为了传递通知,每个客户端都与服务器建立套接字。 我使用了这个指南: https : //spring.io/guides/gs/messaging-stomp-websocket/它完美无缺。 在此示例中,客户端通过套接字发送消息,服务器响应。

  1. 问题是我无法找到服务器向客户端发送消息的方式,而无需客户端先发送消息!
  2. 是否可以列出所有连接的websockets?

谢谢,

我的回答:

  1. 客户端不需要发送消息,但他们必须连接和订阅。 我实际上是在浏览器连接和订阅然后开始发送消息的应用程序中自己做的。 在服务器端,您可以使用SimpMessagingTemplate对象自动assembly服务(或其他组件),然后使用convertAndSend系列函数将事物发送给特定用户或所有订户。 如果您查看投资组合项目,您可以看看price.stock主题是如何完成的。 客户端连接并订阅,服务器具有要发送给它的预定作业。 此服务使用MessageSendingOperations对象,但您可以使用上面提到的SimpMessagingTemplate。 我在我们的应用程序服务中有这个代码:

    @Autowired private SimpMessagingTemplate messagingTemplate; ... messagingTemplate.convertAndSendToUser(userId, destination, jsonMessage); 
  2. 这个问题有一些关于找到所有用户的好信息。 看起来您需要使用Spring文档中定义的事件来处理STOMP上下文事件 ,以便在需要时自己跟踪事物。 通常,因为这是订阅模型,您可能不需要知道谁连接。 您还可以构建自己的主题,发出请求,让所有客户回复并查找他们的post。 我自己没有这样做,但Rossen(其中一位评论员)是该项目的主要作者之一,所以我相信他!

希望这会有所帮助。 让我知道。