心跳与断线重连

为什么需要心跳

长连接需要心跳机制:客户端定期发送 ping,服务端返回 pong。如果一段时间没有心跳,就认为连接失效并清理。

心跳有两个作用:

  • 保活:让中间设备(NAT / 负载均衡)认为连接还活着,不回收。
  • 检测:发现死连接,及时清理资源并统计在线。

心跳间隔的平衡

间隔代价
太短心跳流量大,浪费带宽
太长断线发现慢,在线人数不准确

通常几十秒到几分钟,需要根据网络环境调。

移动网络的特殊性

移动网络下要考虑:

  • 弱网:心跳可能延迟或丢失,误判断线。
  • 前后台切换:切到后台连接可能被系统挂起。
  • NAT 超时:运营商 NAT 可能回收空闲连接。

处理方式:

  • 心跳超时允许多次重试,不一次判定死亡。
  • 前后台切换时主动重连。
  • 客户端周期性与服务端对时,避免时钟漂移。

断线重连

客户端断线后应自动重连,并重新订阅房间:

  1. 检测断线(心跳超时 / 网络变化)。
  2. 指数退避重连(避免风暴)。
  3. 重连成功后重新鉴权 + 订阅房间。
  4. 恢复期间的消息:普通弹幕可丢失,礼物 / 管理消息靠重连后的状态同步补齐。

重连风暴

大量用户同时掉线重连(如断网恢复),会造成重连风暴:

  • 退避重连 + 随机抖动,错开重连时间。
  • 网关对重连频率限流。
  • 按房间 / 网关分组重连。

一句话

心跳是长连接的「生命线」:平衡保活与开销,处理弱网与 NAT,配合退避重连和状态补齐,让连接既省资源又可靠。

下一节看网关的职责与横向扩展。

发现内容有问题?

告诉我们哪里需要改进。