首页/网络/工控与物联网速查/MQTT保活机制与心跳参数设置
物联网协议60 条

MQTT保活机制与心跳参数设置

保活时间定义客户端两次控制报文之间允许的最大间隔,代理在约 1.5 倍时间未收到报文时判定连接失效并触发遗嘱消息。取值要在耗电、网络地址转换老化时间与故障发现速度之间折中。

工控与物联网速查网络更新于 2026-10-17
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌‌​‌‌​‌‌​‌​‌‌‌​​​‌​‌‌‌​‌​​​‌‌‌​‌​​​​‌​‌‌​‌​‌‌​‌​‌‌​‌‌​​‌​‌​‌‌​​‌​‌​‌‌‌​​​​​‌‌​​​​‌​‌‌​‌‌​​​‌‌​‌​​‌​‌‌‌​‌‌​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌​‌​​​​‌‌​​‌​‌​‌‌​​​​‌​‌‌‌​​‌​​‌‌‌​‌​​​‌‌​​​‌​​‌‌​​‌​‌​‌‌​​​​‌​‌‌‌​‌​​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​

保活是双方约定的无报文上限

客户端与代理建连时在连接报文中协商保活时间。此后若没有其他报文,客户端需按需发送心跳请求并等待响应;代理侧在超过约 1.5 倍保活时间仍无报文时断开连接,并按遗嘱设置发布离线消息。设为 0 表示禁用保活,此时连接是否可用只能靠 TCP 层判断,公网场景不建议。

取值影响对照

取值倾向收益代价
保活较短掉线发现快,遗嘱消息及时心跳报文频繁,移动网络下耗电与流量上升
保活较长省电、省流量离线发现滞后,平台短暂显示假在线
禁用保活无心跳开销连接异常难以察觉,可能与服务端上限冲突
接近服务端上限省电协商被服务端覆盖时客户端行为不一致

取值思路

取值思路
# 建连时协商保活 30 秒,之后两次报文间隔不超过 30 秒
# 代理侧约 45 秒未收到报文即断开,并发布遗嘱消息
# 移动网络:保活应小于运营商网络地址转换的空闲老化时间
# 低功耗设备:保活越大越省电,但离线发现越慢,两者需要按业务权衡
# 服务端可能限制最大保活值,客户端应以服务端返回值为准

典型使用场景

  • 移动网络设备:保活要短于网络地址转换老化时间,否则连接被静默回收
  • 电池供电传感器:夜间拉长保活降低耗电,白天恢复正常值
  • 平台在线状态:以保活加遗嘱共同决定设备离线判定的准确度
  • 调试排查:临时缩短保活以便快速观察断线行为
保活只保证连接活性,不保证数据一定送达。判断业务是否正常还需要应用层心跳或状态上报,健康检查指标也应同时看连接数与最近上报时间。
有些客户端库在保活超时后不会自动重连,离线时间会被无限拉长,部署前要确认库的重连策略与退避方式。

易错点

  • 把保活设置为 0:连接异常时双方都不主动发现,故障长时间不可见
  • 保活大于网络地址转换空闲老化时间:链路被静默回收,表现为长时间假在线
  • 保活设置过短:移动网络下心跳频繁,耗电与流量明显上升
  • 忽略服务端保活上限:请求值被覆盖后客户端按原值发心跳,行为与预期不一致

数据来源与参考

  • OASIS MQTT Version 3.1.1 规范(保活章节)
  • OASIS MQTT Version 5.0 规范(连接属性与保活)

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/ics/mqtt-keepalive-heartbeat.html

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌‌​‌‌​‌‌​‌​‌‌‌​​​‌​‌‌‌​‌​​​‌‌‌​‌​​​​‌​‌‌​‌​‌‌​‌​‌‌​‌‌​​‌​‌​‌‌​​‌​‌​‌‌‌​​​​​‌‌​​​​‌​‌‌​‌‌​​​‌‌​‌​​‌​‌‌‌​‌‌​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌​‌​​​​‌‌​​‌​‌​‌‌​​​​‌​‌‌‌​​‌​​‌‌‌​‌​​​‌‌​​​‌​​‌‌​​‌​‌​‌‌​​​​‌​‌‌‌​‌​​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​