• RTT之MQTT学习笔记


    一 协议基础

    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一次心跳收不到就断开连接,这太暴力,多次心跳没应答才断开连接才合理;

      

  • 相关阅读:
    设计模式-状态模式
    设计模式-策略模式
    Spring MVC 梳理
    Spring MVC 梳理
    设计模式-总结
    Spring boot 梳理
    Spring boot 梳理
    [DP题]最长上升子序列
    NOIP2013 Day1
    20171025日程
  • 原文地址:https://www.cnblogs.com/jieruishu/p/14611860.html
Copyright © 2020-2023  润新知