主题通配符
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 会被视为有效主题
主题语义和用法
构建应用程序时,主题树的设计应考虑以下主题名称语法和语义原则:
主题长度必须至少为一个字符。
主题名称区分大小写。例如,Home 和 home 是两个不同的主题。
主题名称可以包含空格字符。例如,My Home 是一个有效的主题。
前导"/"创建一个不同的主题。例如,/Home 与Home不同。/Home 匹配 +/+ 和 /+,但不匹配 +。
不要在任何主题中包含空字符(Unicode)。\x0000
以下原则适用于主题树的构造和内容:
长度限制为 64k,但其中主题树中的级别数没有限制。
可以有任意数量的根节点;也就是说,可以有任意数量的主题树。