Websocket中的渠道与经纪人与目的地

时间:2018-11-09 02:55:35

标签: java spring

Spring Websocket中channelbrokerdestination之间有什么区别?

我最近开始使用网络套接字,据我了解:

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 个答案:

答案 0 :(得分: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