标签:离线 Broker 笔记 RTT MQTT EMQ 保活 设备
一 协议基础:
1.1会话保持
MQTT 没有假设设备或 Broker 使用了 TCP 的保活机制4,而是设计了协议层的保活机制:在 CONNECT 报文里可设置 Keepalive 字段,来设置保活心跳包 PINGREQ/PINGRESP 的发送时间间隔。当长时间无法收到设备的 PINGREQ 的时候,Broker 就会认为设备已经下线
1.2客户端离线过程中的内容的备份
重新上线后,重新收到离线期间错过的消息的设备,MQTT 设计了持久化连接:在 CONNECT 报文里可设置 CleanSession 字段为 False,则 Broker 会为终端存储:
- 设备所有的订阅
- 还未被设备确认的 QoS1 和 QoS 消息
- 设备离线时错过的消息
1.3在线状态感知
MQTT 设计了遗愿(Last Will) 消息,让 Broker 在发现设备异常下线的情况下,帮助设备发布一条遗愿消息到指定的主题。实际上在某些 MQTT 服务器的实现里 (比如 EMQ X),设备上线或下线的时候 Broker 会通过某些系统主题发布设备状态更新,更符合实际应用场景。
1.4MQTT 协议快速体验
EMQ X MQTT 物联网云服务 提供了一个在线的公共 MQTT 5.0 服务器;免费的在线 MQTT 服务器,EMQ 也提供了支持浏览器访问的 MQTT 在线客户端工具。
二 rt-thread 的MQTT组件:
2.1pipe方式理并行收发的问题;
2.2 判断离线:在4G网络,TCP数据延迟一分钟都是可能发生的。因此mqtt keepalive一次心跳收不到就断开连接,这太暴力,多次心跳没应答才断开连接才合理;
标签:离线,Broker,笔记,RTT,MQTT,EMQ,保活,设备 来源: https://www.cnblogs.com/jieruishu/p/14611860.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。