Spring Boot + Websocket(SockJS)


问题内容

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

  1. 问题是,如果不先让客户端先发送消息,我就找不到服务器向客户端发送消息的方法!
  2. 是否可以列出所有连接的Websocket?

谢谢,


问题答案:

我的答案:

  1. 客户端不需要发送消息,但必须连接并订阅。我实际上是在浏览器连接和订阅然后开始发送消息的应用程序中自己做的。在服务器端,您可以使用SimpMessagingTemplate对象将服务(或其他组件)自动连线,然后使用convertAndSend系列功能将内容发送给特定用户或所有订阅者。如果您检出投资组合项目,则可以看到price.stock主题是如何完成的。客户端连接并订阅,并且服务器有计划的作业要发送给它。该服务使用的是MessageSendingOperations对象,但是您可以使用SimpMessagingTemplate,如上所述。我的应用程序服务中有以下代码:
@Autowired
private SimpMessagingTemplate messagingTemplate;

...
messagingTemplate.convertAndSendToUser(userId, destination, jsonMessage);
  1. 这个问题对于找到所有用户都有一些很好的信息。似乎您需要使用Spring文档中有关STOMP上下文事件定义的事件,以便自己跟踪事情。通常,由于这是订阅模式,因此您可能不需要知道谁连接了。您还可以构建自己的主题,向所有客户发出请求以回复并查找他们的帖子。我本人还没有这样做,但是Rossen(评论员之一)是该项目的主要作者之一,所以我相信他!

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