橙汁小窝

MQTT的主题通配符

主题通配符

MQTT是基于主题的订阅/推送的数据传递协议,可以通过不同的主题以实现数据交换中不冲突。
多级通配符和单级通配符可用于广订阅,但消息发布时不能在主题中使用通配符。

主题级别分隔符

正斜杠(/)可以用于分割不同主题的等级,并提供分层结构,方便使用通配符获取多个主题的数据

多级通配符

井号(#)可以匹配该主题等级下的所有主题消息

例如:
订阅 Home/bookroom/# 的情况下可以收到包括但不限于
Home/bookroom/Light Home/bookroom/Fire
Home/bookroom/Power_Strip/Switch1 Home/bookroom/Power_Strip/Switch2

多级通配符可以表示零个或多个级别。因此 Home/bookroom/# 主题也等价 Home/bookroom 主题。
但是多级通配符只能单独使用,或在最后一级主题级分隔符旁边使用

例如:
订阅 Home/## 将被视为有效主题
但是订阅 Home/bookroom# 将被视为无效主题
订阅 Home/#/Fire 也会被视为无效主题

单级通配符

加号(+)仅匹配该主题等级下的主题的消息

例如:
订阅 Home/+/Fire 的情况下可以收到包括但不限于
Home/bookroom/Fire Home/Livingroom/Fire
但不匹配 Home/bookroom/Fire/Warning 等消息
Home/+不能等同Home
但是单级通配可以单独使用
例如:
订阅 Home/++ 将被视为有效主题
订阅 Home/bookroom+ 将被视为无效主题
订阅 Home/+/Fire 会被视为有效主题

主题语义和用法

构建应用程序时,主题树的设计应考虑以下主题名称语法和语义原则:

主题长度必须至少为一个字符。
主题名称区分大小写。例如,Homehome 是两个不同的主题。
主题名称可以包含空格字符。例如,My Home 是一个有效的主题。
前导"/"创建一个不同的主题。例如,/HomeHome不同。/Home 匹配 +/+/+,但不匹配 +
不要在任何主题中包含空字符(Unicode)。\x0000

以下原则适用于主题树的构造和内容:

长度限制为 64k,但其中主题树中的级别数没有限制。
可以有任意数量的根节点;也就是说,可以有任意数量的主题树。

发表评论

电子邮件地址不会被公开。 必填项已用*标注