• MQTT 基础--遗嘱和遗嘱:第 9 部分


    由于 MQTT 经常用于包含不可靠网络的场景,因此可以合理地假设这些场景中的某些 MQTT 客户端偶尔会不正常地断开连接。由于连接丢失、电池电量耗尽或许多其他原因,可能会发生不正常的断开连接。了解客户端是正常断开连接(使用 MQTT DISCONNECT消息)还是不正常断开连接(没有断开连接消息),有助于您正确响应。最后遗嘱和遗嘱功能为客户提供了一种以适当方式应对非正常断开连接的方法。

    最后的遗嘱和遗嘱

    在 MQTT 中,您使用最后遗嘱 (LWT) 功能来通知其他客户端有关不正常断开连接的客户端。每个客户端在连接到代理时都可以指定其最后的遗嘱消息。最后一条遗嘱消息是一条普通的 MQTT 消息,带有主题、保留消息标志、QoS 和有效负载。代理存储消息,直到它检测到客户端不正常地断开连接。作为对不正常断开连接的响应,代理将最后遗嘱消息发送给最后遗嘱消息主题的所有订阅客户端。如果客户端使用正确的 DISCONNECT 消息优雅地断开连接,则代理会丢弃存储的 LWT 消息。

    LWT 帮助您在客户端连接断开时实施各种策略(或至少通知其他客户端有关离线状态)。

    如何为客户端指定 LWT 消息?

    客户端可以在 CONNECT 消息中指定 LWT 消息,用于启动客户端和代理之间的连接。

    要了解有关如何建立客户端和代理之间的连接的更多信息,请参阅MQTT Essentials 的第 3 部分

    代理何时发送 LWT 消息?

    根据MQTT 3.1.1 规范,Broker 必须在以下情况下分发客户端的 LWT:

    • 代理检测到 I/O 错误或网络故障。

    • 客户端无法在定义的 Keep Alive 期限内进行通信。

    • 客户端在关闭网络连接之前不会发送 DISCONNECT 数据包。

    • 由于协议错误,代理关闭了网络连接。

    我们将在下一篇文章
    中听到更多关于 Keep Alive 时间的信息。

    最佳实践 - 什么时候应该使用 LWT?

    LWT 是通知其他订阅客户端有关另一个客户端意外丢失连接的好方法。在实际场景中,LWT 通常与保留消息
    结合使用,以存储客户端在特定主题上的状态。例如,client1 首先向代理发送一条 CONNECT 消息,其中包含“ Offline ”作为有效负载的 lastWillMessage,lastWillRetain 标志设置为 true,lastWillTopic 设置为client1/status。接下来,客户端向同一主题 ( client1/status ) 发送一条带有有效负载“ Online ”且将保留标志设置为 true 的 PUBLISH 消息。只要 client1 保持连接,新订阅到 client1/status 主题的客户端就会收到“ Online” 保留的消息。如果 client1 意外断开,broker 会发布带有有效负载“ Offline ”的 LWT 消息作为新的保留消息。在 client1 离线时订阅主题的客户端会从代理接收 LWT 保留消息(“ Offline ”)。这种保留消息的模式使其他客户端能够及时了解特定主题的 client1 的当前状态。


    这将我们带到了 MQTT Essentials 系列的第九部分的结尾。感谢您加入我们。在本系列的最后一篇文章中,我们将介绍MQTT 心跳机制以及代理如何知道客户端在线或离线

  • 相关阅读:
    Build Speech Apps using Java 21 Crack
    优先级总结
    认识Git的工作区、暂存区与版本库
    顾往前行,我的前端之路系列(三)
    第六届浙江省大学生网络与信息安全竞赛 2023年 初赛/决赛 WEB方向 Writeup
    Qi标准无线供电模块如何处理噪声抑制语音通讯接收灵敏度
    解决selenium使用chrome下载文件(如pdf)时,反而打开浏览器的预览界面
    【SpringMVC】处理器的封装和请求寻找到对应处理器的过程
    git 使用之撤销暂存区提交
    Java的类中属性的使用
  • 原文地址:https://blog.csdn.net/claytang/article/details/125630952