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函数)
2、我这边造成android真机频繁断开和重连的另一个原因是,我在App.vue文件中的onShow和onHide方法中没有添加创建和断开mqtt连接的调用,导致他会频繁断开,下面是我修改后的App.vue的源码:
<script>
export default {
onLaunch: function() {
console.log('App Launch');
uni.hideTabBar();
// #ifdef APP-PLUS
plus.screen.lockOrientation("portrait-primary");
// #endif
},
onShow: function() {
uni.hideTabBar();
console.log('App Show');
try {
const network = this.$gStore.state.bind.mobile.isConnected;
//console.log('network.isConnected=' + network);
if (network) {
this.$glzShadow.reconnectToMQTT();
}
} catch (e) {
console.log('App onShow error: ' + e);
}
},
onHide: function() {
console.log('App Hide');
try {
this.$glzShadow.destroy(true, () => {
console.log('mqtt closed.')
});
} catch (e) {
console.log('App onHide error: ' + e);
}
}
}
</script>
<style>
/*每个页面公共css */
</style>
网上有人说是mqtt 4.x版本造成的频繁断开重连问题,说是3.x版本没问题,我们证实了一下,和mqtt的版本没关系,是网上那帮人自己写的代码逻辑有问题。
到此 uniapp mqtt频繁断开和重连问题(android真机)问题解决。
以上是关于uniapp mqtt 频繁断开和重连问题(android真机)的主要内容,如果未能解决你的问题,请参考以下文章
uniapp即时聊天 websocket封装(建立连接断线重连心跳机制主动关闭)