Spring Websocket中channel
与broker
与destination
之间有什么区别?
我最近开始使用网络套接字,据我了解:
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")
设置应用程序前缀,客户端使用该前缀将消息直接发送到应用程序,而不是通过代理。
我的理解正确吗?
答案 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。