MQTT 订阅选项简介# 示例输入与输出**输入** 人工智能(AI)是计算机科学的一个分支,旨在开发表现出人类智能的软件或机器。这包括从经验中学习、理解自然语言、解决问题以及识别模式。**输出** 人工智能(AI)是计算机科学的一个分支,旨在开发表现出人类智能的软件或机器。这包括从经验中学习、理解自然语言、解决问题以及识别模式。

iotforall 20230813

  • 物联网协议
  • MQTT 5.0
  • QoS
插图:© IoT For All --> 在本文中,我们将专注于探讨MQTT中可用的订阅选项及其用法。MQTT中的订阅由一个主题过滤器和相应的订阅选项组成。因此,我们可以为每个订阅设置不同的订阅选项。MQTT 5.0引入了四个订阅选项:QoS、No Local、Retain As Published和Retain Handling。而另一方面,MQTT 3.1.1仅提供QoS订阅选项。然而,MQTT 5.0中这些新订阅选项的默认行为与MQTT 3.1.1保持一致。这使得如果您计划从MQTT 3.1.1升级到MQTT 5.0,使用起来将更加友好。订阅选项现在,让我们一起来探讨这些订阅选项的功能。QoSQoS是最常用的订阅选项,它表示服务器在向订阅者发送消息时可以使用的最高QoS级别。如果客户端的实现不支持QoS 1或QoS 2,它可以在订阅时指定低于2的QoS级别。此外,如果服务器支持的最高QoS级别低于客户端在订阅时请求的QoS级别,很明显服务器无法满足客户端的需求。在这种情况下,服务器会通过订阅响应包(SUBACK)告知订阅者被授予的最高QoS级别。订阅者可以据此判断是否接受被授予的QoS级别并继续通信。EMQ Technologies Inc.一个简单的计算公式:服务器授予的最高QoS = 最小(服务器支持的最高QoS,客户端请求的最高QoS)然而,订阅过程中请求的最高QoS级别不会限制发布端在发送消息时使用的QoS级别。当订阅请求的最高QoS级别低于消息发布使用的QoS级别时,服务器并不会忽略这些消息。为最大程度地实现消息传递,它会在转发之前将这些消息的QoS级别降级。EMQ Technologies Inc.同样,我们有一个简单的计算公式:转发消息的QoS = 最小(消息的原始QoS,服务器授予的最高QoS)No LocalNo Local选项只有两个可能的值,0和1。值为1表示服务器必须不能将消息转发给发布该消息的客户端,而值为0则表示相反。这个选项通常用于桥接场景。桥接本质上就是两个MQTT服务器建立MQTT连接,然后它们相互订阅一些主题。服务器将客户端的消息转发给另一个服务器,后者可以继续将消息转发给其客户端。EMQ Technologies Inc.让我们考虑一个最简单的例子,假设两个MQTT服务器,服务器A和服务器B。它们相互订阅了主题#。现在,服务器A将一些消息从客户端转发给服务器B,而当服务器B查找匹配的订阅时,服务器A也在那里。如果服务器B将消息转发给服务器A,那么服务器A接收到这些消息后,又会将它们转发给服务器B,从而导致一个无尽的转发风暴。然而,如果服务器A和服务器B在订阅主题#时都将No Local选项设置为1,就可以理想地避免这个问题。Retain As PublishedRetain As Published选项也有两个可能的值,0和1。将其设置为1表示服务器在将应用程序消息转发给订阅者时应保留Retain标志不变,而将其设置为0则表示必须清除Retain标志。与No Local选项类似,Retain As Published主要应用于桥接场景。我们知道当服务器接收到保留消息时,除了存储它之外,还会像普通消息一样将它转发给现有订阅者,而转发时该消息的Retain标志会被清除。这在桥接场景中带来了问题。继续沿用之前的设置,当服务器A将一个保留消息转发给服务器B时,Retain标志被清除,导致服务器B无法识别它是一个保留消息,也不会存储它。这使得保留消息在桥接中无法使用。在MQTT 5.0中,我们可以在订阅时让桥接服务器将“Retain”发布选项设置为1,以解决这个问题。EMQ Technologies Inc.Retain HandlingRetain Handling订阅选项指示服务器在建立订阅时是否发送保留消息。当建立订阅时,服务器中匹配订阅的保留消息默认会进行发送。然而,有些情况下客户端可能不希望接收保留消息。例如,如果客户端在连接时重用了一个会话,但无法确认上一次连接是否成功建立了订阅,它可能会尝试再次订阅。如果订阅已经存在,保留消息可能已经被消费,或者服务器可能缓存了客户端离线期间到达的一些消息。在这种情况下,客户端可能不希望接收到服务器发布的保留消息。此外,客户端可能在任何时候都不希望接收保留消息,即使在初次订阅时。例如,我们将开关的状态作为保留消息发送,但对某个特定订阅者来说,开关事件会触发一些操作,因此在这种情况下,不发送保留消息是有帮助的。我们可以根据以下三种不同的行为选择Retain Handling:将Retain Handling设置为0表示每次建立订阅时都会发送保留消息。将Retain Handling设置为1表示只有在建立新订阅时才发送保留消息,而不是在重复订阅时。将Retain Handling设置为2表示在建立订阅时不会发送任何保留消息。TweetShareShareEmail MQTTNetwork and Protocols --> MQTTNetwork and Protocols

查看全文

点赞

iotforall

作者最近更新

  • 如何实现Sigfox与LoRaWAN的设备融合
    iotforall
    2023-12-22
  • 2024年边缘计算与物联网预测
    iotforall
    2023-12-22
  • 物联网设备安全挑战:呼吁消费者提高警惕
    iotforall
    2023-12-20

期刊订阅

相关推荐

  • 应该如何为产品选择合适的物联网协议?

    2020-02-24

  • HTTP 与 MQTT:物联网中的对比# 示例输入与输出 **输入** 人工智能(AI)是计算机科学的一个分支,旨在开发表现出人类智能的软件或机器。这包括从经验中学习、理解自然语言、解决问题以及识别模式。 **输出** 人工智能(AI)是计算机科学的一个分支,旨在开发表现出人类智能的软件或机器。这包括从经验中学习、理解自然语言、解决问题以及识别模式。

    2023-06-16

  • 物联网协议和标准如何支持物联网生态系统中的安全数据交换?

    2022-05-30

  • 物联网协议和标准如何支持物联网生态系统中的安全数据交换?

    2022-06-01

评论0条评论

×
私信给iotforall

点击打开传感搜小程序 - 速览海量产品,精准对接供需

  • 收藏

  • 评论

  • 点赞

  • 分享

收藏文章×

已选择0个收藏夹

新建收藏夹
完成
创建收藏夹 ×
取消 保存

1.点击右上角

2.分享到“朋友圈”或“发送给好友”

×

微信扫一扫,分享到朋友圈

推荐使用浏览器内置分享功能

×

关注微信订阅号

关注微信订阅号,了解更多传感器动态

  • #{faceHtml}

    #{user_name}#{created_at}

    #{content}

    展开

    #{like_count} #{dislike_count} 查看评论 回复

    共#{comment_count}条评论

    加载更多

  • #{ahtml}#{created_at}

    #{content}

    展开

    #{like_count} #{dislike_count} #{reback} 回复

  • #{ahtml}#{created_at}

    #{content}

    展开

    #{like_count} #{dislike_count} 回复

  • 关闭
      广告