概述
文章目录
- MQTT主题
- 1 主题基本形式
- 2 主题分级
- 3 主题通配符
- 3.1 单级通配符: +
- 3.2 多级通配符 #
- 4 主题应用注意事项
- 4.1 以$开始的主题
- 4.2 不要用 “/” 作为主题开头
- 4.3 主题中不要使用空格
- 4.4 保持主题简洁明了
- 4.5 主题中尽量使用ASCII字符
- 4.6 在主题中嵌入客户端ID
MQTT主题
MQTT主题知识:
- 主题基本形式
- 主题分级
- 主题通配符
- 主题应用注意事项
1 主题基本形式
主题的最基本形式就是一个字符串。以下是几个主题示例:
- myTopic
- motorSpeed
- MotorSpeed
- current time
虽然主题看起来很简单,但是我们在使用主题时需要注意以下几点:
主题是区分大小写的
。如上列表中的主题 motor_speed和Motor_speed是两个完全不同的主题。主题可以使用空格
如以上列表中的current time,虽然有空格分隔current和time这两个词,但这实际是一个MQTT主题。不过,虽然我们可以使用空格,但是笔者强烈建议您不要在主题中使用空格。我们在开发时一不小心,可能就会漏掉空格,这将造成不必要的麻烦。- 大部分MQTT服务端是不支持中文主题的,所以我们应使用英文字符或
ASCII
字符来作为MQTT主题。
2 主题分级
MQTT主题可以是一个简单的字符串,比如motor_speed,myTopic。这些都是单一级别的主题。
为了更好的对主题进行管理和分类,我们可以对主题进行分级处理。MQTT主题各个级别之间可以使用”/
”来分隔。如下例所示:
Tyler-1/motor/1/speed
在以上示例中一共有四级主题,分别是第1级 Tyler-1、第2级motor、第三级1、第4级speed。主题的每一级至少需要一个字符,比如以上示例中,数字1既是一级主题。
3 主题通配符
当客户端
订阅主题
时,可以使用通配符
同时订阅多个主题。通配符只能在订阅主题时使用,下面我们将介绍两种通配符:单级通配符和多级通配符。
3.1 单级通配符: +
单级通配符可以代替一个
主题级别
。 以下为含有单极通配符的主题示例。
home/sensor/+/temperature
当客户端订阅了以上主题后,它将会收到以下主题的信息内容:
home/sensor/kitchen
/temperature
home/sensor/bedroom
/temperature
我们可以看到,在home后面的级别中,由于客户端订阅的主题使用了+
单级通配符,因此无论home级别后面的内容是什么,客户端都能收到这些主题的信息。
相反,客户端将无法收到以下主题的信息。
home/sensor/bedroom/brightness
office
/sensor/bedroom//temperature
home/screen
/livingroom/temperature
以上主题的红色部分都是客户端无法收到信息的原因。这些红色的部分都是与客户端订阅的主题“home/sensor/+/temperature
”不相符的部分。
3.2 多级通配符 #
单级通配符仅可代替一个主题级别,而多级通配符”
#
”可以涵盖任意数量的主题级别。如下示例所示, 多级通配符必须是主题中的最后一个字符。
home/sensor/#
当客户端订阅了以上含有”#”的主题后,可以收到以下主题的信息。
home/sensor/kitchen/temperature
home/sensor/bedroom/brightness
home/sensor/data
多级通配符可以代替多级主题信息,因此无论”home/sensor
”后面有一级还是多级主题,都可以被订阅了”home/sensor/#
”的客户端接收到。
4 主题应用注意事项
4.1 以$开始的主题
以
$
开始的主题是MQTT服务端系统保留的特殊主题
,我们不能随意订阅或者向其发布信息。以下是此类主题的示例:
$
SYS/broker/clients/connected
$
SYS/broker/clients/disconnected
$
SYS/broker/clients/total
$
SYS/broker/messages/sent
$
SYS/broker/uptime
类似的主题还有很多。不过请记住一点,以$
符号开头的主题是系统保留的特殊主题,我们不能随意订阅或者向其发布信息。
4.2 不要用 “/” 作为主题开头
MQTT允许使用“
/
”作为主题的开头,例如/home/sensor/data
。但是这将这么做毫无意义,而且会额外产生一个没有用处的主题级别。所以我们应避免使用/作为主题的开头。
4.3 主题中不要使用空格
MQTT协议允许我们在主题中使用
空格
,但是阅读和调试含有空格的主题会显得异常困难。所以我们尽量不要在主题中使用空格或者特殊字符。
4.4 保持主题简洁明了
MQTT是一种
轻量级
的通讯协议,它常用于网络带宽受限的环境,因此我们应尽量让主题简洁明了,从而让设备间交互的内容更加简洁,以更好的适应网络带宽受限的环境。
4.5 主题中尽量使用ASCII字符
虽然很多MQTT设备支持UTF-8字符作为MQTT主题,但是笔者建议您在主题中尽量使用
ASCII
字符。
4.6 在主题中嵌入客户端ID
在主题中嵌入发布消息的
客户端ID
,这一操作可以为开发和管理MQTT信息提供便利。通过主题中的客户端ID内容,我们可以很容易的了解该主题信息是由哪一台设备所发布的。
内容来自 -----> 太极创客
详情可见太极创客官网,内有Arduino、ESP32等详细教程
最后
以上就是平常鸵鸟为你收集整理的【MQTT基础篇(七)】MQTT主题MQTT主题的全部内容,希望文章能够帮你解决【MQTT基础篇(七)】MQTT主题MQTT主题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复