【问题标题】:Basic websocket with Spring without STOMP and SockJS没有 STOMP 和 SockJS 的带有 Spring 的基本 websocket
【发布时间】:2023-08-19 19:51:01
【问题描述】:

我已经实现了以下 websocket 端点

@MessageMapping("/socket/{myId}/")
@SendTo("/queue/myqueue")
public MyObject getObject(@DestinationVariable String myId) throws Exception {

    return new MyObject("MyId:" + myId);
}

现在如何从我的 service.java 类之一向该端点发送消息? 也会有前端客户端,一旦 service.java 类的方法向 websocket 端点发送一些消息,它将从 websocket 读取消息。我有点困惑,我该怎么做?

任何帮助将不胜感激

【问题讨论】:

    标签: java spring websocket spring-websocket


    【解决方案1】:

    当使用原始 websocket(不带 STOMP)时,发送的消息缺少信息以使 Spring 将其路由到特定的消息处理程序方法(我们没有任何消息传递协议),因此您无需注释控制器,而是必须通过扩展 TextWebSocketHandler 来实现 WebSocketHandler 公共无效句柄TextMessage(WebSocketSession会话,TextMessage消息){ }

    在此处查看示例spring boot websocket without STOMP and SockJs

    【讨论】:

      【解决方案2】:

      你应该看看SimpMessagingTemplate。 例如,如果您想为您的服务类中的特定用户发送消息:

      @Autowired
      private SimpMessagingTemplate messagingTemplate;
      
      public void sendMessage(User user, String message) {
          Objects.requireNonNull(user);
          Objects.requireNonNull(message);
          messagingTemplate.convertAndSendToUser(user.getUsername(), "/queue/myqueue", message);
      }
      

      【讨论】:

      • 谢谢。让我试试那个
      最近更新 更多