遇到了同样的问题,原因是小程序切到后台 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
微信小程序中关于mqtt在小程序切后台后长连接强制断开后重连的问题?在使用mqtt.js客户端连接阿里云物联网平台后,当小程序在前台(或者息屏)时基本都正常。一旦小程序切刀后台,5秒后微信将断开小程序的长连接。当小程序再回到前台时,mqtt的客户端无法自动重连(有时候会耗时很长可能重连成功),这样的话体验就很不好。不知道大家是如何做的?
2024-09-14遇到了同样的问题,原因是小程序切到后台 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
微信小程序中关于mqtt在小程序切后台后长连接强制断开后重连的问题?在使用mqtt.js客户端连接阿里云物联网平台后,当小程序在前台(或者息屏)时基本都正常。一旦小程序切刀后台,5秒后微信将断开小程序的长连接。当小程序再回到前台时,mqtt的客户端无法自动重连(有时候会耗时很长可能重连成功),这样的话体验就很不好。不知道大家是如何做的?
2024-09-14遇到了同样的问题,原因是小程序切到后台 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
微信小程序中关于mqtt在小程序切后台后长连接强制断开后重连的问题?在使用mqtt.js客户端连接阿里云物联网平台后,当小程序在前台(或者息屏)时基本都正常。一旦小程序切刀后台,5秒后微信将断开小程序的长连接。当小程序再回到前台时,mqtt的客户端无法自动重连(有时候会耗时很长可能重连成功),这样的话体验就很不好。不知道大家是如何做的?
2024-09-14遇到了同样的问题,原因是小程序切到后台 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
微信小程序中关于mqtt在小程序切后台后长连接强制断开后重连的问题?在使用mqtt.js客户端连接阿里云物联网平台后,当小程序在前台(或者息屏)时基本都正常。一旦小程序切刀后台,5秒后微信将断开小程序的长连接。当小程序再回到前台时,mqtt的客户端无法自动重连(有时候会耗时很长可能重连成功),这样的话体验就很不好。不知道大家是如何做的?
2024-09-14