频道连接状态管理

最近更新时间:2022-09-20 05:17:40

音视频互动时,会有多个连接状态。本文将介绍 RTC SDK 与服务器的频道连接状态和转变过程。

连接状态

加入房间进行音视频互动过程中,可以监听 SDK 的 onConnectionStateChanged 回调,当用户的连接状态发生改变时,SDK 会触发该回调。

该回调有以下连接状态:

连接状态说明
DISCONNECTED(1)连接断开
CONNECTING(2)建立网络连接中
CONNECTED(3)网络已连接
RECONNECTING(4)重新建立网络连接中
FAILED(5)网络连接失败

下图展示连接状态发生改变的触发时机:

在通信过程中也可以主动查询,调用 getConnectionState 获取当前 SDK 与服务器网络的连接状态。也可以搭配使用 onConnectionStateChanged 回调中的 reason 参数,更详细的了解 SDK 与服务器网络的连接状态。

断线重连

在通信过程中,当 SDK 与服务器网络连接出现中断时,SDK 会自动开启断线重连机制。

下图展示从用户 UID 1 加入频道,到连接中断,再到连接完全失败过程中,本地及远端用户 UID 2 会收到的回调:

其中:

  1. S0:SDK 接收到本地用户 joinChannel 请求。
  2. S1:通常在调用 joinChannel 200 毫秒后,用户可以加入频道。加入频道过程中,UID 1 会收到 onConnectionStateChanged (connection_state_connecting, connection_changed_connecting);加入后收到 onConnectionStateChanged (connection_state_connected, connection_changed_join_success) 和 onJoinChannelSuccess 回调。
  3. S2:因网间传输延迟,UID 2 感知 UID 1 加入频道约有 100 毫秒的延迟,此时 UID 2 收到 onUserJoined 回调。
  4. S3:某个时间点 UID 1 客户端因断网等原因导致上行网络变差。SDK 自动尝试重新加入频道。
  5. S4:如果 UID 1 连续四秒没有收到服务器发送的任何数据,UID 1 会收到 onConnectionStateChanged(connection_state_reconnecting, connection_changed_interrupted) 回调;同时 SDK 继续尝试重新加入频道。
  6. S5:如果 UID 1 连续 10 秒没有收到服务器发送的任何数据,UID 1 会收到 onConnectionLost 回调;同时 SDK 继续尝试重新加入频道。
  7. S6:如果 UID 2 连续 20 秒没有收到 UID 1 的任何数据,SDK 判断远端用户掉线,UID 2 会收到 onUserOffline 回调。
  8. S7:如果 UID 1 连续 20 分钟无法重新加入频道,SDK 不再继续尝试。UID 1 收到 onConnectionStateChanged(connection_state_failed, connection_changed_join_failed) 回调;用户需要退出当前频道,然后重新加入频道。

API 参考