emqx的Keep alive

在 MQTT 协议和 EMQX 的默认设置中,Keep Alive(心跳间隔) 的数值取决于客户端的设置,但服务端(EMQX)也有相应的默认保护机制:

1. 客户端默认值

  • 标准默认值 :大多数 MQTT 客户端库(如 Paho, MQTT.js, Mosquitto)通常将默认 Keep Alive 设置为 60 秒

  • 协议要求 :Keep Alive 是由客户端在 CONNECT 报文中指定的。如果设置为 0,则表示禁用心跳机制,连接将永远不会因为不活跃而被服务端断开。

2. EMQX 服务端配置

EMQX 允许通过配置文件(emqx.conf)来规范或强制修改客户端的行为,防止客户端设置不合理的参数:

  • 最大 Keep Alive(Max Keep Alive)

    默认通常为 不限制。但你可以配置一个上限,如果客户端请求的时间超过此值,EMQX 会强制将其降低。

  • 心跳后退系数(Backoff Multier)

    EMQX 默认遵循协议标准,采用 1.5 倍 的宽限期。

    公式超时时间 = \\text{Keep Alive} \\times 1.5

    例如:如果客户端设置 Keep Alive 为 60s,EMQX 会在 90s 内没有收到任何包时才判定为掉线。


3. 如何选择合适的时间?

设置 Keep Alive 需要在实时性资源消耗之间平衡:


注意事项:TCP Keep-Alive vs MQTT Keep-Alive

很多人会混淆这两者:

  • MQTT Keep-Alive (应用层):由 EMQX 进程维护,通过 PINGREQ 包实现,推荐使用

  • TCP Keep-Alive(传输层):由操作系统内核维护。EMQX 默认也启用了 TCP Keep-Alive(通常是 2 小时后才开始探测),它更多是作为网络底层的最后一道防线。

配置建议: 如果你发现设备明明断电了,但 EMQX 后台还显示"在线",通常是因为 Keep Alive 设置得太长 或者是由于 网络中间件(如防火墙)拦截了断开信号,此时缩短 Keep Alive 时间是最有效的办法。

官方文档地址:https://www.emqx.com/zh/blog/mqtt-keep-alive

相关推荐
程序员Jelena6 小时前
接口调用的代码实现:从入门到实战
java
xqqxqxxq6 小时前
树结构技术学习笔记
数据结构·笔记·学习
代码钢琴师6 小时前
Throttle4j 快速上手教程
java
2601_961194026 小时前
考研资料电子版|去哪找|网盘
java·c语言·c++·python·考研·php
于先生吖6 小时前
前后端分离二手商城开发,质检登记、回收回款整套业务源码部署教程
java·开发语言·uni-app
小锋java12346 小时前
分享一套锋哥原创的基于LangChain4j的RAG医疗健康知识智能问答系统(SpringBoot4+Vue3+Ollama)
java·人工智能
十月的皮皮6 小时前
C语言学习笔记202606008- 三角形判断(3种方法)
c语言·笔记·学习
XGeFei6 小时前
【Fastapi学习笔记(6)】—— Fastapi文件上传、请求头自动转换
笔记·学习·fastapi
程序员晨曦6 小时前
Java 并发修仙传:ThreadLocal 从“闭关修炼”到“走火入魔”的救赎之路
java·开发语言
AIGS0016 小时前
探索向量空间JBoltAI:工业企业数智化升级的基础设施
java·人工智能·人工智能ai大模型应用