主题
主题
基本形式
主题是区分大小写的。所以"LEDControl"和"ledControl"是两个不同的主题。
主题可以使用空格。譬如"LED Control",虽然主题允许使用空格,但是笔者建议大家尽量不要使用空格。
不要使用中文主题。虽然有些 MQTT 服务器支持中文主题,但是绝大部分 MQTT 服务器是不支持中文主题的,所以大家不要使用中文主题,而是使用 ASCII 字符来作为 MQTT 主题。
主题分级
home/sensor/led/brightness"
在以上示例中一共有四级主题,分别是第 1 级 home、第 2 级 sensor、第三级 led、第 4 级 brightness。
主题的每一级至少需要一个字符;而只有一个简单字符串的主题,譬如"myTopic"、"currentTemp"、"LEDControl",这些都是单一级别的主题。
可以向文件路径那样命名
"home/sensor/kitchen/temperature"
"home/sensor/kitchen/brightness"
"home/sensor/bedroom/temperature"
"home/sensor/bedroom/brightness"
需要注意的是,主题名称不要使用" / "开头,譬如:
"/home/sensor/led/brightness"
主题通配符
当客户端订阅主题时,可以使用通配符同时订阅多个主题。通配符只能在订阅主题时使用,下面我们将
介绍两种通配符:单级通配符和多级通配符。
单级通配符:+
单级通配符可以匹配任意一个主题级别,注意是一个主题级别,譬如示例如下:
"home/sensor/+/status"
当客户端订阅了上述主题之后,将会收到以下主题的信息内容:
"home/sensor/led/status"
"home/sensor/key/status"
"home/sensor/beeper/status"
......
相反,而以下这些主题的信息是无法接收到的:
"dt/sensor/led/status"
"home/kash/key/status"
"home/sensor/led/brightness"
......
以上这些注意将无法接收到,原因在于这些主题无法与"home/sensor/+/status"相匹配。
多级通配符:#
"home/sensor/#"
当客户端订阅了上面这个主题之后,便可以收到如下注意的信息:
"home/sensor/led"
"home/sensor/key"
"home/sensor/beeper"
"home/sensor/led/status"
"home/sensor/led/brightness"
"home/sensor/key/status"
"home/sensor/beeper/status"
......
相反,如下主题的信息是无法接收到的:
"home/kash/led"
"dt/sensor/led"
"dt/kash/led"
......
这就是多级通配符的概念。
以$开头的主题
以$号开头的主题是 MQTT 服务端系统保留的特殊主题,客户端不可随意订阅或向其发布信息
"$SYS/monitor/Clients"
"$SYS/monitor/+"
"$SYS/#"
注意
不要使用“/”作为主题开头
前面就给大家提到过了,我们尽量不要使用“/”作为主题的开头,这样做没有什么意义,而且额外产生一个没有用处的主题级别。
主题中不要使用空格
虽然,MQTT 支持在主题中使用空格,但是我们应该尽量避免使用空格。因为空格在编程当中是一个
比较特殊的字符,除了空格之外的其它特殊字符也应该不要使用。
保持主题简洁明了
MQTT 是一种轻量级的通讯协议,它常用于网络带宽受限的环境,因此我们应尽量让主题简洁明了,
从而让设备间交互的内容更加简洁,以更好的适应网络带宽受限的环境。
主题中尽量使用 ASCII 字符
虽然有些 MQTT 设备支持 UTF-8 字符作为 MQTT 主题,但是笔者建议您在主题中尽量使用 ASCII 字符

