在 MQTT 中,"主题"是指代理用于过滤每个已连接客户端消息的 UTF-8 字符串。主题由一个或多个主题层级组成,每个主题层级用正斜杠(主题层级分隔符)分隔。
myHome / groundfloor / livingroom / temperature
与消息队列相比,MQTT 主题非常轻量。客户端无需在发布或订阅之前创建所需的主题。broker 在无需任何预先初始化的情况下接受每个有效主题。请注意,每个主题至少须包含 1 个字符,且主题字符串允许包含空格。主题区分大小写。
当客户端订阅某个主题时,它可以订阅已发布消息的确切主题,也可以使用通配符同时订阅多个主题。通配符只能用于订阅主题,不能用于发布消息。通配符有两种类型:单级和多级。
顾名思义,单级通配符替换一个主题级别。加号表示主题中的单级通配符。
myHome / groundfloor / + / temperature
任何主题与具有单级 通配符的主题匹配,前提是它包含一个任意字符串代替通配符。例如,订阅 _myhome/groundfloor/+/temperature 可能产生 以下结果:
YES => myHome / groundfloor / livingroom / temperature
YES => myHome / groundfloor / kitchen / temperature
NO => myHome / groundfloor / livingroom / brightness
NO => myHome / firstfloor / livingroom / temperature
NO => myHome / groundfloor / kitchen / fridge / temperature
多级通配符覆盖多个主题级别。井号表示主题中的多级通配符。要让 broker 确定哪些主题匹配,多级通配符必须作为最后一个字符放置在主题中,并在其前面加上正斜杠。
myHome / groundfloor / #
YES => myHome / groundfloor / livingroom / temperature
YES => myHome / groundfloor / kitchen / temperature
YES => myHome / groundfloor / kitchen / brightness
NO => myHome / firstfloor / kitchen / temperature
当客户端使用多级通配符订阅主题时,它将接收以通配符字符之前的模式开头的所有主题消息,无论主题有多长或多深。如果仅指定多级通配符作为主题(_#),您将接收发送到 MQTT broker 的所有消息。