赞
踩
先说一下问题在公司的业务场景:
前端页面作为消费者,监听的是rabbitmq中的一个交换机,由此来订阅消息,原生websocket因为无法更好实现监听和数据传输,所以采用stomp来更好创建socket,但是websocket经历一段时间会自动断开,但是这里很多说采用心跳机制来实现,是的,这种方法是可以让原生写websocket实现,但是我这里使用的是stompjs,查阅很多资料,都无法满足我的需求,但是为了解决在mq断开的时候,不断重连带来的浏览器开销问题,让人很头疼,顾采用计数和时间间隔来另辟蹊径,解决无法断开socket
适用于场景
如果看到此篇博客的朋友,也是采用stomp来订阅mq消息,同时又为了在不可预知的情况下,mq服务没有开启导致一直创建socket实例带来的巨大开销问题,我觉得此篇文章可以帮助你,但是仅限于,你是采用stomp方式来订阅消息,如果你采用其他解决方案如心跳机制和第三方websocket框架那就另说了,
解决步骤如下(这里用图片代替了,重点是有几个坑要避开):
创建websocket并获得stomp对象
这几个参数很简单,重点关注成功和失败的回调函数即可
这里是连接到mq中的交换机的回调函数的业务操作,这里没什么好说的
这个失败方法在websocket和mq连接中,我这里测试到65秒样子,websocket会自动断开连接,我这里写的是5秒之后重连,counConnection是记录重连的次数,diffSecond是为了记录上次重连时间和当前时间得间隔,在mq服务为开启的情况,我这里重连时间是5秒+浏览器响应时间,大概7秒,所以,远远不超过20秒,当连接次数大于五次切重连时间间隔小于20秒,即可认定为mq服务是关闭的,所以即可关闭socket连接,这里关闭socket方法是disconnect()不是close(),close是原生websocket对象的关闭方法。这个坑,朋友们切记!!
总结
其实我这个方法也属实无奈之举,websocket痛点太多了,保持长连接的还是得加入心跳机制来实现,但是我现目前还没有找到不通过stomp来订阅mq的方法而且采用stomp,那就需要断开的是stomp对象不是原生的socket对象方法。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。