当前位置:   article > 正文

websocket中stompjs订阅消息队列消息,无法正常关闭socket带来的浏览器开销问题_stompjs 关闭消息连接

stompjs 关闭消息连接

先说一下问题在公司的业务场景:

前端页面作为消费者,监听的是rabbitmq中的一个交换机,由此来订阅消息,原生websocket因为无法更好实现监听和数据传输,所以采用stomp来更好创建socket,但是websocket经历一段时间会自动断开,但是这里很多说采用心跳机制来实现,是的,这种方法是可以让原生写websocket实现,但是我这里使用的是stompjs,查阅很多资料,都无法满足我的需求,但是为了解决在mq断开的时候,不断重连带来的浏览器开销问题,让人很头疼,顾采用计数和时间间隔来另辟蹊径,解决无法断开socket

适用于场景

如果看到此篇博客的朋友,也是采用stomp来订阅mq消息,同时又为了在不可预知的情况下,mq服务没有开启导致一直创建socket实例带来的巨大开销问题,我觉得此篇文章可以帮助你,但是仅限于,你是采用stomp方式来订阅消息,如果你采用其他解决方案如心跳机制和第三方websocket框架那就另说了,

解决步骤如下(这里用图片代替了,重点是有几个坑要避开):

  • 创建websocket并获得stomp对象

  • 创建连接mq

这几个参数很简单,重点关注成功和失败的回调函数即可

  • 创建成功回调

这里是连接到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对象方法。

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/814748
推荐阅读
相关标签
  

闽ICP备14008679号