微信小程序 mqtt 连接中断原因
约 312 字大约 1 分钟
2025-07-04
中断表现
上周开发微信小程序时新加了一个页面,复用了以前页面的逻辑,但是今天发现新加的页面出现了很奇怪的问题:
进入新页面后,点一下查询再退出页面,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 ,不为空才取消定订阅,否则不取消。