断线重连机制是什么?
断线重连是指在计算机网络中,当网络连接遇到异常中断或者断开时,系统会自动尝试重新建立连接,以保证网络通信的连续性和稳定性。断线重连是一种常见的网络通信技术,广泛应用于各种计算机网络场景,包括互联网、局域网、广域网等。
断线重连在 RTC 中也是一种常用的技术手段,用于在网络连接中断时自动重新建立连接,确保通信的可靠性和稳定性。
本文介绍断线重连在WebRTC中实现的步骤,断线重连的最佳实践(在 ZEGO音视频SDK中的逻辑处理)。
WebRTC 中实现断线重连的步骤
在 WebRTC 中,实现音视频断线重连通常需要以下步骤:
- 长连接与心跳机制:
- 建立长连接,保持客户端和服务器之间的通信。
- 实现心跳机制,定期发送心跳包以检测连接状态。
- 断线重连策略:
- 当连接断开时,设置一个重连计时器。
- 在一定时间后,尝试重新连接服务器。
- 如果重连失败,可以根据具体情况进行处理,例如更新 UI 状态。
- WebRTC PeerConnection 监听:
- 使用
OnIceConnectionChange
方法监听 ICE 连接状态的变化。 - 当连接状态变为
kIceConnectionDisconnected
时,触发断线重连逻辑。
- 使用
请注意,具体实现可能因应用场景和需求而异。你可以根据你的项目要求,选择合适的断线重连策略和实现方式。
ZEGO音视频SDK断线重连逻辑说明
ZEGO音视频SDK支持断线重连机制。下面将介绍房间重连下的 SDK 的逻辑处理。
ZEGO音视频SDK是一款实时的音视频互动服务产品,能够为开发者提供便捷接入、高可靠、多平台互通的音视频服务。通过低至 200 ms 的端到端平均时延,业内领先的保障弱网质量的 QoS 策略,并结合强大的 3A 处理能力,完美支持一对多、多对多的实时音视频通话、直播、会议等场景。详情可通过https://www.zego.im/product/realtime-video了解
房间重连
用户登录房间后,因网络信号问题/网络类型切换问题导致的与房间断连,SDK 内部会进行自动重连。
用户可通过监听 onRoomStateChanged
回调实时监控自己在本房间内的连接状态。在登录房间时将参数 config
中的 isUserStatusNotify
设置为 “true” 的前提下,房间内的其他用户可通过 onRoomUserUpdate
回调获取到某用户连接状态变化的通知。
房间状态示意图
房间断连后重连的情况有如下三种:
情况一:在服务端判断用户 A 心跳超时前重连成功
如果用户 A 短暂断线,但是在 90s 内重连成功了,那么用户 B 不会收到 onRoomUserUpdate
的回调通知。
- T0 = 0s:用户 A 的 SDK 收到客户端发起的
loginRoom
请求。 - T1 ≈ T0 + 120 ms:通常在调用
loginRoom
120 ms 后,客户端可以加入房间。加入房间过程中,用户 A 的客户端会收到 2 次onRoomStateChanged
回调,分别通知客户端正在连接房间(logining)以及连接房间成功(logined)。 - T2 ≈ T1 + 100 ms:因网络传输延迟,用户 B 约在 100 ms 后收到
onRoomUserUpdate
回调以通知客户端用户 A 加入房间。 - T3:某个时间点,用户 A 因网络断开等原因导致上行网络变差。SDK 会尝试重新加入房间,同时客户端会收到
onRoomStateChanged
回调以通知客户端用户 A 正在断线重连。 - T5 = T3 + time(小于 90s):用户 A 在重连时间内恢复网络,重连成功。会收到
onRoomStateChanged
回调以通知客户端用户 A 重连成功。
情况二:在服务端判断用户 A 心跳超时后重连成功:
- T0、T1、T2、T3 时刻的情况同“情况一:在服务端判断用户 A 心跳超时前重连成功”中的 T0、T1、T2、T3。
- T4′ ≈ T3 + 90s:用户 B 此时收到
onRoomUserUpdate
回调以通知用户 A 已断线。 - T5′ = T3 + time(大于 90s,小于 20 min):用户 A 在重连时间内恢复网络,重连成功。会收到
onRoomStateChanged
回调以通知客户端用户 A 重连成功。 - T6′ ≈ T5′ + 100 ms:因网络传输延迟,用户 B 约在 100 ms 后收到
onRoomUserUpdate
回调以通知客户端用户 A 加入房间。
情况三:用户 A 重连失败:
- T0、T1、T2、T3 时刻的情况同“情况一:在服务端判断用户 A 心跳超时前重连成功”中的 T0、T1、T2、T3。
- T4” ≈ T3 + 90s:用户 B 此时收到
onRoomUserUpdate
回调以通知用户 A 已断线。 - T5” = T3 + 20 min:如果用户 A 连续 20 min 内无法重新加入房间,SDK 不再继续尝试重新连接。用户 A 将会收到
onRoomStateChanged
回调以通知客户端重连失败。
以上就是ZEGO音视频SDK中的房间重连逻辑说明。当然,在RTC中还有常见的推流重连、拉流重连,详细的重连逻辑处理可阅读《Express SDK 是否支持断线重连机制?》进行了解。
原创文章,作者:ZEGO即构科技,如若转载,请注明出处:https://market-blogs.zego.im/reports-baike/1262/