spring-boot - @EnableWebSocket 和 @EnableWebSocketMessageBroker 有什么区别
问题描述
我想在 Spring 应用程序中启用套接字,并且在文档中提出了两种使用它们的方法,简单的和启用 STOMP 的。
我知道后者由消息代理支持,但没有找到对此功能的任何好的解释。
@EnableWebSocketMessageBroker
所以,我的问题是,与 Spring相比,Spring 在使用时会带来什么幕后场景@EnableWebSocket
?
解决方案
从我目前所读到的内容来看,区别在于后面的 ( @EnableWebSocketMessageBroker
) 为交换的消息提供了更好的处理。为了以某种方式控制它们,一个非常好的方法是使用消息代理:
- 易于广播到感兴趣的部分。否则,您必须跟踪会话并遍历它们,以便向每个感兴趣的客户发送消息
- 确保消息到达客户端。开箱即用的消息代理提供确认标志,这些标志将在客户端和服务器之间互换,以确保消息传输和拦截
注意:注解@EnableWebSocketMessageBroker
默认情况下不会添加一个底层的全功能代理,而是一个“简单的”。简单版:
- 支持 STOMP 的子集:SUBSCRIBE、UNSUBSCRIBE、MESSAGE
- 没有确认、收据、交易
- 简单的消息发送循环
- 不适合聚类
功能齐全的将添加更多功能,可以在其演示文档中找到。(阅读更多http://rstoyanchev.github.io/s2gx2013-websocket-browser-apps-with-spring)
其他值得阅读的参考:Message queues vs sockets , The MessageBroker WebSocket Subprotocol
推荐阅读
- python - Python:如何使用 __setitem__ 设置子类 int 的值
- asp.net-mvc-4 - 是否可以在 MVC 5 和 .Net core MVC 3.1 应用程序之间共享 .ASPXAUTH cookie
- reactjs - Gatsby.js 中的多个模板
- node.js - 在axios请求NodeJS中传递key和value
- angular - Angular Laravel Pusher 419 unknown status when trying to auth user
- r - R does not read tables from SQLite
- windows - How to update the local cached credentials of AD user when DC is not reachable?
- flutter - ScaffoldMessenger 抛出英雄动画错误
- java - 如何以正确的方式从 java 访问 kotlin libray glm?
- azure - Azure Function Application 预热状态