uniapp mqtt 频繁断开和重连问题(android真机)
Posted 地表最强菜鸡
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了uniapp mqtt 频繁断开和重连问题(android真机)相关的知识,希望对你有一定的参考价值。
公司是做物联网相关产品的,这段时间项目组遇到了uniapp打包的android离线apk,出现mqtt频繁断开&重连的问题,如果你看到这篇文章,说明你运气好,恭喜你,你的问题可以被解决了。
我们使用的mqtt.js版本是@4.1.0 的mini版本,这边原版本和mini版本我都提供出来
@4.1.0 mini版下载地址:
https://unpkg.com/mqtt@4.1.0/dist/mqtt.min.js
@4.1.0 原版下载地址:
https://unpkg.com/mqtt@4.1.0/dist/mqtt.js
出现频繁断连和重连的原因可能是以下两点中的其中一点造成的:
1、mqtt.js底层没有对你调用它方法传入的callback函数做异常捕获(你传入callback函数里面不做异常捕获,会导致mqtt底层代码逻辑异常,导致频繁断连&重连问题发生),所以你所有的callback函数都需要增加try..catch..方法捕获异常(比如发布,订阅,监听等方法调用的时候的第二个callback函数),下面是我修改后的mqtt.js源码:
2、android真机和小程序不同,小程序关闭页面同时断开mqtt连接,打开页面会同时创建mqtt连接,android则不同,android最小化后他还是在后台运行的,所以他不需要你主动关闭和创建mqtt连接,我这边造成android真机频繁断开和重连的另一个原因是,我在App.vue文件中的onShow和onHide方法中写了创建和断开mqtt连接的调用,导致他会频繁断开,下面是我修改后的App.vue的源码:
<script>
export default {
onShow: function() {
uni.hideTabBar();
console.log('App Show');
//#ifdef MP-WEIXIN
try {
this.$shadow.destroy(true, ()=>{
console.log('mqtt closed.');
this.$shadow.connectToMQTT();
});
} catch (e) {
console.log('App onShow error: ' + e);
}
//#endif
},
onHide: function() {
console.log('App Hide');
//#ifdef MP-WEIXIN
try {
this.$shadow.destroy(true, () => {
console.log('mqtt closed.')
});
} catch (e) {
console.log('App onHide error: ' + e);
}
//#endif
}
}
</script>
网上有人说是mqtt 4.x版本造成的频繁断开重连问题,说是3.x版本没问题,我们证实了一下,和mqtt的版本没关系,是网上那帮人自己写的代码逻辑有问题。
到此 uniapp mqtt频繁断开和重连问题(android真机)问题解决。
以上是关于uniapp mqtt 频繁断开和重连问题(android真机)的主要内容,如果未能解决你的问题,请参考以下文章
uniapp即时聊天 websocket封装(建立连接断线重连心跳机制主动关闭)