You need to enable JavaScript to run this app.
导航

如何解决网络断开重连后用户无法进房

最近更新时间2023.08.28 12:05:26

首次发布时间2022.01.21 10:36:54

问题描述

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