3 回答
TA贡献1877条经验 获得超6个赞
哦,client side no need to known about current user服务器会为您做到这一点。
在服务器端,使用以下方式将消息发送给用户:
simpMessagingTemplate.convertAndSendToUser(username, "/queue/reply", message);
注意:使用queue,而不是topic,Spring始终queue与一起使用sendToUser
在客户端
stompClient.subscribe("/user/queue/reply", handler);
说明
当任何websocket连接打开时,Spring会为其分配一个session id(而不是HttpSession为每个连接分配)。当您的客户订阅以开头的频道/user/(例如:)时/user/queue/reply,您的服务器实例将订阅一个名为queue/reply-user[session id]
使用发送消息给用户时,例如:用户名是admin 您将写simpMessagingTemplate.convertAndSendToUser("admin", "/queue/reply", message);
Spring将确定哪个session id映射到user admin。例如:它发现了两个会话wsxedc123和thnujm456,Spring会将其转换为2个目标queue/reply-userwsxedc123和queue/reply-userthnujm456,并将带有2个目标的消息发送到消息代理。
消息代理接收消息,并将其提供回服务器实例,该实例对应于每个会话(WebSocket会话可以由一个或多个服务器保留)。Spring会将消息翻译为destination(例如:)user/queue/reply和session id(例如:)wsxedc123。然后,它将消息发送到相应的Websocket session
添加回答
举报