保活是双方约定的无报文上限
客户端与代理建连时在连接报文中协商保活时间。此后若没有其他报文,客户端需按需发送心跳请求并等待响应;代理侧在超过约 1.5 倍保活时间仍无报文时断开连接,并按遗嘱设置发布离线消息。设为 0 表示禁用保活,此时连接是否可用只能靠 TCP 层判断,公网场景不建议。
取值影响对照
| 取值倾向 | 收益 | 代价 |
|---|---|---|
| 保活较短 | 掉线发现快,遗嘱消息及时 | 心跳报文频繁,移动网络下耗电与流量上升 |
| 保活较长 | 省电、省流量 | 离线发现滞后,平台短暂显示假在线 |
| 禁用保活 | 无心跳开销 | 连接异常难以察觉,可能与服务端上限冲突 |
| 接近服务端上限 | 省电 | 协商被服务端覆盖时客户端行为不一致 |
取值思路
取值思路
# 建连时协商保活 30 秒,之后两次报文间隔不超过 30 秒
# 代理侧约 45 秒未收到报文即断开,并发布遗嘱消息
# 移动网络:保活应小于运营商网络地址转换的空闲老化时间
# 低功耗设备:保活越大越省电,但离线发现越慢,两者需要按业务权衡
# 服务端可能限制最大保活值,客户端应以服务端返回值为准典型使用场景
- 移动网络设备:保活要短于网络地址转换老化时间,否则连接被静默回收
- 电池供电传感器:夜间拉长保活降低耗电,白天恢复正常值
- 平台在线状态:以保活加遗嘱共同决定设备离线判定的准确度
- 调试排查:临时缩短保活以便快速观察断线行为
保活只保证连接活性,不保证数据一定送达。判断业务是否正常还需要应用层心跳或状态上报,健康检查指标也应同时看连接数与最近上报时间。
有些客户端库在保活超时后不会自动重连,离线时间会被无限拉长,部署前要确认库的重连策略与退避方式。