理解MQTT主题

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/

猜你喜欢

转载自blog.csdn.net/maimang1001/article/details/109246215
今日推荐