【问题标题】:How to define Spring WebSocket subscriber path如何定义 Spring WebSocket 订阅者路径
【发布时间】:2014-11-04 03:22:19
【问题描述】:

我想知道如何定义订阅者路径。

比如订阅路径的声明

    stompClient.subscribe("/topic/simplemessagesresponse", function(servermessage) {

为什么有两个部分“主题”和“简单消息响应”.. 他们指的是什么。可以有多少这样的域部分,为什么?我的问题不仅针对客户端,还针对服务器端。 SimpMessagingTemplate.convertAndSend("/topic/simplemessagesresponse", "Message to client");

有一些教程展示了 websocket 服务器和客户端示例。但是没有足够的规则细节来声明订阅者路径以及如何找到订阅者路径。

在服务器和客户端声明路径时更改路径的依赖项是什么。我认为另一个similar question 是由于编写websocket 客户端的页面的位置更改而引发的。

【问题讨论】:

    标签: javascript spring websocket sockjs


    【解决方案1】:

    引用 STOMP 规范文档:

    请注意,STOMP 将此目的地视为一个不透明的字符串,而不是 交付语义由目的地名称假定。你 应该查阅 STOMP 服务器的文档以了解如何 构造一个目的地名称,为您提供交付语义 您的应用程序需要的。

    这意味着目标语义是特定于代理的:

    【讨论】:

      【解决方案2】:

      我已经按照blog 实现了 websocket stomp。 我用 SimpMessagingTemplate 替换了@SendTo。

      这是我的示例 ChatController

      @Autowired
      private SimpMessagingTemplate simpMessagingTemplate;
      
      @MessageMapping("/dualchart")
      @ResponseBody
      public void dualchat(MessageDTO message) {
          // forward message to destination
          String destination = "/topic/dualchat/" + message.getToUser();
          simpMessagingTemplate.convertAndSend(destination, message);
      }
      

      MessageDTO

      @JsonIgnoreProperties
      public class MessageDTO extends BaseModel {
          private String fromUser;
          private String toUser;
          private String message;
          public String getFromUser() {
              return fromUser;
          }
              public void setFromUser(String fromUser) {
              this.fromUser = fromUser;
          }
          public String getToUser() {
              return toUser;
          }
          public void setToUser(String toUser) {
              this.toUser = toUser;
          }
          public String getMessage() {
              return message;
          }
          public void setMessage(String message) {
              this.message = message;
          }
      }
      

      网络套接字配置

      <websocket:message-broker application-destination-prefix="/app"> 
          <websocket:stomp-endpoint path="/dualchat">
              <websocket:sockjs />
          </websocket:stomp-endpoint>
          <websocket:simple-broker prefix="/topic" /> 
      </websocket:message-broker>
      

      Javascript

      var socket = new SockJS("/starter.web.admin/dualchat");
      var stompClient = Stomp.over(page.socket);
      stompClient.connect({}, socketJsConnectedCallback, socketJsErrorCallback);
      
      function socketJsConnectedCallback() {
          var myId = "111"; // replace this Id
          stompClient.subscribe('/topic/dualchat/' + myId, function(message) {
              console.log("you reveived a message::::::::::" + JSON.stringify(message));
              // you have message, and you can do anything with it
          });
      }
      function socketJsErrorCallback(error){console.log(error);}
      
      function sendMessage(message) {
          var data = {
              toUser : "1",
              message : message
          }
          stompClient.send("/app/dualchat", {}, JSON.stringify(data );
      }
      

      希望这将有助于下一次搜索...

      【讨论】:

        猜你喜欢
        • 2018-09-16
        • 2021-04-22
        • 2018-10-31
        • 2018-07-18
        • 1970-01-01
        • 2019-02-14
        • 2017-08-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多