这是 Beta 探索课程,内容结构、实验步骤和示例可能会继续调整。
心跳与断线重连
为什么需要心跳
长连接需要心跳机制:客户端定期发送 ping,服务端返回 pong。如果一段时间没有心跳,就认为连接失效并清理。
心跳有两个作用:
- 保活:让中间设备(NAT / 负载均衡)认为连接还活着,不回收。
- 检测:发现死连接,及时清理资源并统计在线。
心跳间隔的平衡
| 间隔 | 代价 |
|---|---|
| 太短 | 心跳流量大,浪费带宽 |
| 太长 | 断线发现慢,在线人数不准确 |
通常几十秒到几分钟,需要根据网络环境调。
移动网络的特殊性
移动网络下要考虑:
- 弱网:心跳可能延迟或丢失,误判断线。
- 前后台切换:切到后台连接可能被系统挂起。
- NAT 超时:运营商 NAT 可能回收空闲连接。
处理方式:
- 心跳超时允许多次重试,不一次判定死亡。
- 前后台切换时主动重连。
- 客户端周期性与服务端对时,避免时钟漂移。
断线重连
客户端断线后应自动重连,并重新订阅房间:
- 检测断线(心跳超时 / 网络变化)。
- 指数退避重连(避免风暴)。
- 重连成功后重新鉴权 + 订阅房间。
- 恢复期间的消息:普通弹幕可丢失,礼物 / 管理消息靠重连后的状态同步补齐。
重连风暴
大量用户同时掉线重连(如断网恢复),会造成重连风暴:
- 退避重连 + 随机抖动,错开重连时间。
- 网关对重连频率限流。
- 按房间 / 网关分组重连。
一句话
心跳是长连接的「生命线」:平衡保活与开销,处理弱网与 NAT,配合退避重连和状态补齐,让连接既省资源又可靠。
下一节看网关的职责与横向扩展。
发现内容有问题?
告诉我们哪里需要改进。
