今天踩了个坑,来说下。
WebSocket连接后,大概会因为手机系统自己的进程管理,会出现“断线休眠”的情况。安卓,apple都有这个情况。
解决方法是websocket断线常规解决方法“心跳”,每过几秒就发一条消息,倒计时重新创建连接。
我这里java后端写的websocket,我在浏览器测试,连接一天都不会掉线,很稳,所以一开始就没使用心跳监听。
我写在vuex里面,app每次启动只创建一次socket连接。
但在app里面,连接成功后,大概5,10分钟就会“休眠”,实际没断线,onclose方法也没执行,send方法success方法也成功了。但发不出消息,收不到其他人的消息。很多次测试都没发现,坑死了。
记录一下,希望给后来的人一点提示。
1***@qq.com
- 发布:2020-03-21 20:04
- 更新:2020-12-23 09:46
- 阅读:2280
4 个回复
默毅品牌设计
感谢指点迷津,最近我也烦,老是掉线 我都掉了一撮头发了
无锡小王子
我也是,但是我感觉还是要在页面写个定时器
3***@qq.com
怎么解决?
ben168 - App developer
看了很多网上关于websocket 心跳的帖子,尤其是很多帖子用javascrypt 编程的例子,都是自己用timeout 方式实现向服务器发送‘心跳‘包来解决是否连线的问题。我认为这些帖子误导了读者。
因为, websocket 底册已经实现的心跳机制(ping / pong 包), 一般是服务端成功接受一个websocket 链接后,每隔一定的时间间隔(如5秒)就向客户端发送一个 ping, 客户端收到ping后,自动回复pong 包(这是底层实现的,不需开发者care)。
服务器端如果收不到对应的pong,则认为这个连接断开了,做close 处理。