异常中断可能是本地网络断开,也可能是微信小程序被切换到后台,中断恢复后,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();
})
}
})
javascript