理解MQTT主题

MQTT主题是消息传递的重要组成部分,允许客户端通过类似文件系统的结构共享信息。主题区分大小写,使用UTF-8字符串,并至少包含一个字符。$SYS主题用于发布服务器状态信息。客户端可以订阅单个或使用通配符订阅多个主题,如#(多级通配符)和+(单级通配符)。发布时只能指定单个主题。主题在有订阅者或保留消息时存在,删除条件通常涉及客户端断开连接和清除会话。动态创建主题发生在订阅或发布时。
摘要由CSDN通过智能技术生成

MQTT主题是一种寻址方式,它允许MQTT客户端共享信息。

MQTT主题的结构类似于文件系统中的文件夹和文件,使用正斜杠(/)作为分隔符。

使用这个系统,您可以创建一个用户友好的和自描述的命名结构,由您自己选择。

主题名称:

  • 区分大小写
  • 使用UTF-8字符串。
  • 必须包含至少一个字符才能有效。

$ SYS主题

除$ SYS主题外,没有默认主题或标准主题结构。

默认情况下,除了$ SYS主题外,在服务器(broker)上不会创建任何主题。

所有主题均由订阅或发布客户端创建,并且不是永久性的。

仅当客户端已订阅主题,或者服务器(broker)具有针对该主题存储保留消息或最后遗嘱消息时,该主题才存在。

$ SYS主题是一个保留的主题,大多数MQTT服务器(broker)都使用它来发布有关服务器(broker)的信息。

它们是MQTT客户端的只读主题。 该主题结构没有标准,但是这里有一个指导原则,大多数服务器(broker)实现似乎都在遵循。

订阅主题


客户可以订阅单个或多个主题。

订阅多个主题时,可以使用两个通配符。 他们是:

#(哈希字符)——多级通配符
  +(加号)——单级通配符
通配符只能用于表示一个或多个级别,比如 / house /#,而不能用作表示多个字符的名称的一部分,例如 hou#则是无效的.

主题命名示例

有效主题订阅


订阅单个主题

  • /
  • /house
  • house/room/main-light
  • house/room/side-light

使用主题通配符


订阅主题 house/#

包括

  • house/room1/main-light
  • house/room1/alarm
  • house/garage/main-light
  • house/main-door
  • etc

订阅主题 house/+/main-light

包括

  • house/room1/main-light
  • house/room2/main-light
  • house/garage/main-light

但不包括

  • house/room1/side-light
  • house/room2/side-light

无效的主题订阅

house+ – 原因-无主题级别
house# – 原因-无主题级别

发布主题


客户只能发布到单个主题。 也就是说,不允许在发布时使用通配符。

例如,要将消息发布到两个主题,您需要两次发布消息。

何时创建主题


在以下情况下动态创建主题:

  • 有人订阅了一个主题
  • 某人向主题发布消息将保留的消息设置为True。

什么时候从服务器(broker)删除主题

  • 当最后一个向该服务器(broker)订阅的客户端断开连接时并且清除会话设置为true。
  • 当客户端连接时,清除会话设置为True。

重新发布主题数据


更改或组合命名方案时,很可能会这样做。

这个想法是客户会订阅一个主题,例如hub1 / sensor1,并使用新主题命名house1 / main-light重新发布数据。

常见问答


问:我如何订阅所有主题?
答:订阅#

问:我如何订阅所有$ SYS主题?
答:订阅$ SYS /#

问:我应该以/开头我的主题层次结构吗?
答:不需要,只是在结构中增加了另一个层次。

问:我可以获取服务器(broker)所有主题的列表吗?
答:除非您订阅所有主题并进行扫描,否则不能。

问:我可以告诉谁订阅了一个主题吗?
答:否

问:我如何发现主题?
答:目前,除了列出所有主题以外,没有其他机制。

 

http://www.steves-internet-guide.com/understanding-mqtt-topics/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值