微信小程序 mqtt 连接中断原因
上周开发微信小程序时新加了一个页面,复用了以前页面的逻辑,但是今天发现新加的页面出现了很奇怪的问题:
- 进入新页面后,点一下查询再退出页面,mqtt连接正常;
- 进入新页面后,直接返回退出页面,mqtt连接中断。
WebSocket connection to "wss://www.xxxx.com/mqtt" failed:Close received after close
经过排查,发现小程序的生命周期onUnload和onHide里面都调用了取消订阅的方法 client.unsubscribe(subsTopic) ,但是不点查询的时候并没有订阅 subsTopic 。
订阅之后多次取消订阅没有问题,但是没有订阅时调用取消订阅 mqtt 连接就会中断。
onUnload() { console.log("卸载页面"); this.clearTopic(); }, onHide() { console.log("隐藏页面"); this.clearTopic(); },
解决办法:
去掉onUnload和onHide里的 this.clearTopic,在查询数据里面1. 订阅主题 2. 发布主题 3. 获取数据 4. 取消订阅主题。
补充:也可以在 unsubscribe 之前先检查一下 this.subsTopic ,不为空才取消定订阅,否则不取消。