异常中断可能是本地网络断开,也可能是微信小程序被切换到后台,中断恢复后,SDK 无法自动重新进房。
首先需要判断 WebSocket 在异常中断后是否已经断开。
如果 WebSocket 在异常中断后断连,则需要进行重连。
如果异常中断后 WebSocket 连接没有正常断开,由于小程序最多支持 2 个并发 WebSocket 连接,此时 SDK 尝试进房将没有可用的 WebSocket 连接。因此,你需要确保用户退出房间时调用 client.leave 来断开 WebSocket 长连接。
在 meeting.js 中加入以下代码。
Page({ data: { networkStatus: true, }, onLoad() { wx.onNetworkStatusChange(e => { const isConnected = e.isConnected; if (isConnected && !this.data.networkStatus) { // 处理断网恢复 this.reconnect(); } this.setData({ networkStatus: isConnected, }); }); }, onShow() { if (this.client && this.client.state !== 'connected') { // 处理退后台再回前台的case this.reconnect(); } }, reconnect() { wx.showToast({ title: `恢复连接中...`, icon: 'none', duration: 2000, }); if (this.client) { this.client.destroy(); } this.setData({ remoteStreams: [], publishUrl: '' }); this.client = new VolcMiniappSdk.Client(); this._handleClientEvents(); this.join(); }, _handleClientEvents() { if (this.client) { this.client.removeAllListeners(); } this.client.on(VolcEngineRTCMiniappSDK.EVENTS.CLOSE, (e) => { // 如果连接的websocket域名处于黑名单中 // 需要销毁做重连 this.reconnect(); }) } })