Websocket中的通道、代理和目标的区别

5

在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") 设置应用前缀,客户端使用它直接向应用程序发送消息,而不是通过代理。

我的理解正确吗?

1个回答

4

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

Broker

消息代理是在两个应用程序之间处理通信时充当中介平台的,将其应用到 Spring Websocket 中:

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

Channel

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

Destination

它可以被视为通道的另一层分层,我发现这张图片可以帮助理解:

https://docs.spring.io/spring/docs/5.1.3.BUILD-SNAPSHOT/spring-framework-reference/images/message-flow-simple-broker.png

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接