【问题标题】:Channel vs. Broker vs. Destination in WebsocketWebsocket 中的 Channel vs. Broker vs. Destination
【发布时间】:2018-11-09 02:55:34
【问题描述】:

Spring websocket中channelbrokerdestination有什么区别?

我最近开始使用 websocket,据我了解:

registry.addEndpoint("/wsocket/") 添加了一个 websocket 端点,仅在客户端想要连接到 websocket 服务时使用:

this.client.configure({
      brokerURL: `ws://localhost:9022/wsocket`,
      onConnect: () => {
        this.client.subscribe('/quote/fb', message => {
          console.log(message);
        });
      }
    });
    this.client.activate();

config.enableSimpleBroker("/quote") 启用通道/代理,让客户端订阅它并接收通过它发布/发送的消息。客户端可以订阅服务器上的任何/quote/*

config.setApplicationDestinationPrefixes("/app") 设置应用程序前缀,客户端使用该前缀将消息直接发送到应用程序,而不是通过代理。

我的理解正确吗?

【问题讨论】:

    标签: java spring


    【解决方案1】:

    我认为你的理解是正确的。

    经纪人

    在处理两个应用程序之间的通信时,消息代理充当中介平台。在 spring websocket 的上下文中:

    当您使用 Spring 的 STOMP 支持时,Spring WebSocket 应用程序充当客户端的 STOMP 代理。消息被路由到@Controller 消息处理方法或一个简单的内存中代理,该代理跟踪订阅并将消息广播给订阅用户。您还可以将 Spring 配置为与专用的 STOMP 代理(例如 RabbitMQ、ActiveMQ 等)一起用于实际的消息广播。在这种情况下,Spring 维护与代理的 TCP 连接,将消息中继给它,并将消息从它向下传递到连接的 WebSocket 客户端。

    频道

    可以将其视为一个或两个方向的消息的逻辑隔离。例如,可以有三个通道。一个用于请求(传入服务器),第二个用于响应(从服务器传出),第三个用于错误(从服务器传出)。

    目的地

    可以认为通道的另一个层次嵌套。我发现这张图片有助于理解它:

    https://docs.spring.io/spring/docs/5.1.3.BUILD-SNAPSHOT/spring-framework-reference/images/message-flow-simple-broker.png [![在此处输入图片描述][1]][1]

    客户端可以使用 SEND 或 SUBSCRIBE 命令发送或订阅消息,以及描述消息内容和接收人的目标标头。这启用了一个简单的发布-订阅机制,您可以使用该机制通过代理向其他连接的客户端发送消息,或向服务器发送消息以请求执行某些工作。

    我发现有关此主题的 Spring 文档非常有帮助:https://docs.spring.io/spring/docs/5.1.3.BUILD-SNAPSHOT/spring-framework-reference/web.html#websocket-stomp-handle-simple-broker

    【讨论】:

      猜你喜欢
      • 2021-03-27
      • 2023-04-03
      • 1970-01-01
      • 2015-07-13
      • 1970-01-01
      • 2019-10-09
      • 2016-05-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多