没有合适的资源?快使用搜索试试~ 我知道了~
springboot websocket集群(stomp协议)连接时候传递参数

温馨提示


试读
4页
主要介绍了springboot websocket集群(stomp协议)连接时候传递参数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
资源推荐
资源详情
资源评论














springboot websocket集群(集群(stomp协议)连接时候传递参数协议)连接时候传递参数
主要介绍了springboot websocket集群(stomp协议)连接时候传递参数,文中通过示例代码介绍的非常详细,对大
家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
最近在公司项目中接到个需求。就是后台跟前端浏览器要保持长连接,后台主动往前台推数据。
网上查了下,websocket stomp协议处理这个很简单。尤其是跟springboot 集成。
但是由于开始是单机玩的,很顺利。
但是后面部署到生产搞集群的话,就会出问题了。
假如集群两个节点,浏览器A与节点A建立连接,A节点发的消息浏览器A节点肯定能收到。但是B节点由于没有跟浏览器A建立连
接。B节点发的消息浏览器就收不到了。
网上也查了好多,但是没有一个说的很清楚的,也很多都是理论层面的。
还有很多思路都是通过session获取信息的。但是这都不是我需要的。我需要的是从前台传递参数,连接的时候每个节点保存下。
然后通过SimpleUserRegistry.getUser获取。
话不多说,直接上代码。
<script type="text/javascript" src="${request.contextPath}/scripts/sockjs.min.js"></script>
<script type="text/javascript" src="${request.contextPath}/scripts/stomp.min.js"></script>
var WEB_SOCKET = {
topic : "",
url : "",
stompClient : null,
connect : function(url, topic, callback,userid) {
this.url = url;
this.topic = topic;
var socket = new SockJS(url); //连接SockJS的endpoint名称为"endpointOyzc"
WEB_SOCKET.stompClient = Stomp.over(socket);//使用STMOP子协议的WebSocket客户端
WEB_SOCKET.stompClient.connect({userid:userid},function(frame){//连接WebSocket服务端
// console.log('Connected:' + frame);
//通过stompClient.subscribe订阅/topic/getResponse 目标(destination)发送的消息
WEB_SOCKET.stompClient.subscribe(topic, callback);
});
}
};
这是响应的前端代码。只需要引入两个js。调用new SockJS(url) 就代表跟服务器建立连接了。
@Configuration
//注解开启使用STOMP协议来传输基于代理(message broker)的消息,这时控制器支持使用@MessageMapping,就像使用@RequestMapping一样
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Autowired
private GetHeaderParamInterceptor getHeaderParamInterceptor;
@Override
//注册STOMP协议的节点(endpoint),并映射指定的url
public void registerStompEndpoints(StompEndpointRegistry registry) {
//注册一个STOMP的endpoint,并指定使用SockJS协议
registry.addEndpoint("/endpointOyzc")
.setAllowedOrigins("*")
.withSockJS();
/* registry.addEndpoint("/endpointOyzc")
.setAllowedOrigins("*")
.setHandshakeHandler(xlHandshakeHandler)
.withSockJS();*/
}
@Override
//配置消息代理(Message Broker)
public void configureMessageBroker(MessageBrokerRegistry registry) {
//点对点应配置一个/user消息代理,广播式应配置一个/topic消息代理
registry.enableSimpleBroker("/topic", "/user");
// 全局使用的消息前缀(客户端订阅路径上会体现出来)
//registry.setApplicationDestinationPrefixes("/app");
//点对点使用的订阅前缀(客户端订阅路径上会体现出来),不设置的话,默认也是/user/
registry.setUserDestinationPrefix("/user");
}
/**
资源评论

- lvzi982021-04-22代码不全,还是补全把
- qq_375605802021-03-16https://www.yzlfxy.com/jiaocheng/java/331587.html 拿走不谢

weixin_38570145
- 粉丝: 4
- 资源: 924
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


安全验证
文档复制为VIP权益,开通VIP直接复制
