本文介绍 Agora 频道如何判断用户在通信的各个阶段处于什么连接状态以及各状态的转变过程。
为帮助开发者更好地了解和管理用户在频道内的连接状态,Agora Web SDK 提供 AgoraRTCClient.connectionState 字段和 AgoraRTCClient.on("connection-state-change") 回调帮助你获取当前的连接状态。
当用户连接状态发生改变时,SDK 会触发 AgoraRTCClient.on("connection-state-change") 回调,并在回调中明确当前的连接状态和发生状态改变的原因。
下面列出所有的连接状态:
"DISCONNECTED"
: 连接断开。处于这个状态时,SDK 不会自动重连。该状态表示用户处于以下任一阶段:
join
加入频道。leave
离开频道。"CONNECTING"
: 正在连接。调用 join
时为此状态。
"CONNECTED"
: 已连接。该状态表示用户已经加入频道,可以在频道内发布或订阅媒体轨道。
"RECONNECTING"
: 连接断开,正在尝试重连。因网络断开或切换导致 SDK 与服务器的连接中断,SDK 会自动重连,进入此状态。
"DISCONNECTING"
: 正在断开连接。调用 leave
时为此状态。
下图展示连接状态发生改变的触发时机:
通信过程中,如果 SDK 因网络等原因,断开与服务器的连接,SDK 会自动开启断线重连机制。
下图展示从本地用户 UID 1 加入频道,到连接中断,再到连接完全失败过程中,本地用户 UID 1 和远端用户 UID 2 会收到的回调:
其中:
Client.join
请求。AgoraRTCClient.on("connection-state-change")
回调报告 "CONNECTING"
,加入后报告 "CONNECTED"
。AgoraRTCClient.on("user-joined")
回调。AgoraRTCClient.publish
发布本地轨道。AgoraRTCClient.on("user-published")
回调,表示 UID 1 已发布轨道。UID 2 可以调用 AgoraRTCClient.subscribe
方法订阅 UID 1 的轨道。AgoraRTCClient.on("connection-state-change")
回调报告 "RECONNECTING"
。AgoraRTCClient.on("user-unpublished")
回调。AgoraRTCClient.on("user-left")
回调。AgoraRTCClient.on("connection-state-change")
回调报告 "CONNECTED"
。AgoraRTCClient.on("user-joined")
回调。进程被杀时 SDK 会触发的回调,请参考 FAQ:SDK 对断网、杀进程的处理。