小程序
小游戏
企业微信
微信支付
扫描小程序码分享
在使用mqtt.js客户端连接阿里云物联网平台后,当小程序在前台(或者息屏)时基本都正常。一旦小程序切刀后台,5秒后微信将断开小程序的长连接。当小程序再回到前台时,mqtt的客户端无法自动重连(有时候会耗时很长可能重连成功),这样的话体验就很不好。不知道大家是如何做的?
7 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
遇到了同样的问题,原因是小程序切到后台 5s 会强制挂起 JS 线程(https://developers.weixin.qq.com/miniprogram/dev/framework/runtime/operating-mechanism.html#_1-3-%E6%8C%82%E8%B5%B7),导致长链断开
解决思路:在小程序到前台时,调用 reconnect 方法,并使用额外状态判断是否是连接状态
class MqttChat { private client: Client private reconnect = false /** * 在微信小程序中,如果应用切到后台,会导致长链断掉,但是 mqtt 里的 connected 仍然是 true, * 所以需要自己维护一个 connected 状态 */ public connected = false constructor(options: MqttChatClientOptions) { const { userId, ...restOptions } = options this.options = options this.userId = userId this.client = mqtt.connect(`wxs://${mqttHost}:${port}/mqtt`, { ...restOptions, // 认证信息 clientId: MqttChat.getClientId(userId) }) this.initEventListeners() } private initEventListeners() { this.client.on('connect', packet => { // 实际连接状态 this.connected = true // 订阅消息 this.client.subscribe('topic') if (!this.reconnect) { // 第一次连接成功 } }) this.client.on('reconnect', () => { this.reconnect = true }) wx.onAppShow(() => { // 切换到前台时,极大概率是断连了,需要重新连接 this.connected = false this.client.reconnect() }) } } export default MqttChat
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
mark 有相同的问题
屏幕放置一段时间后,不息屏也会断开
遇到同样问题,苦恼中。
想尝试一下,on hide 就DISCONNECT, 然后ON SHOW 就再CONNECT.
我现在的做法是,每次切后台后强制断开,再回前台时,再重连(创建新的client对象)。
我也遇到这个问题,有没有大佬有好点的解决方案?
有解决吗?遇到一样的问题,息屏会自动重连并连接上,切后台一段时间就重连不上
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
遇到了同样的问题,原因是小程序切到后台 5s 会强制挂起 JS 线程(https://developers.weixin.qq.com/miniprogram/dev/framework/runtime/operating-mechanism.html#_1-3-%E6%8C%82%E8%B5%B7),导致长链断开
解决思路:在小程序到前台时,调用 reconnect 方法,并使用额外状态判断是否是连接状态
class MqttChat { private client: Client private reconnect = false /** * 在微信小程序中,如果应用切到后台,会导致长链断掉,但是 mqtt 里的 connected 仍然是 true, * 所以需要自己维护一个 connected 状态 */ public connected = false constructor(options: MqttChatClientOptions) { const { userId, ...restOptions } = options this.options = options this.userId = userId this.client = mqtt.connect(`wxs://${mqttHost}:${port}/mqtt`, { ...restOptions, // 认证信息 clientId: MqttChat.getClientId(userId) }) this.initEventListeners() } private initEventListeners() { this.client.on('connect', packet => { // 实际连接状态 this.connected = true // 订阅消息 this.client.subscribe('topic') if (!this.reconnect) { // 第一次连接成功 } }) this.client.on('reconnect', () => { this.reconnect = true }) wx.onAppShow(() => { // 切换到前台时,极大概率是断连了,需要重新连接 this.connected = false this.client.reconnect() }) } } export default MqttChat
mark 有相同的问题
屏幕放置一段时间后,不息屏也会断开
遇到同样问题,苦恼中。
想尝试一下,on hide 就DISCONNECT, 然后ON SHOW 就再CONNECT.
我现在的做法是,每次切后台后强制断开,再回前台时,再重连(创建新的client对象)。
我也遇到这个问题,有没有大佬有好点的解决方案?
有解决吗?遇到一样的问题,息屏会自动重连并连接上,切后台一段时间就重连不上