topicName:/topic/valve/upload
topicFilter:/topic/valve/#
- 相邻主题级别分隔符(2个连续的’/')表示零长度主题级别。
topicName:/topic/valve//control
1.2. 多级通配符#
- 数字符号 (‘#’ U+0023) 是一个通配符,可匹配主题中任意数量的级别。多级通配符代表父级和任意数量的子级。
- 多级通配符必须单独指定或在主题级分隔符之后指定。
- 在任何一种情况下,它都必须是主题过滤器 [MQTT-4.7.1-2]中指定的最后一个字符
举例:- 主题列表
- sport/tennis/player1
- sport/tennis/player1/ranking
- sport/tennis/player1/score/wimbledon
- 主题列表
| 序号 | 示例 | 合法状态 | 适配主题 | 备注 |
|---|---|---|---|---|
| 1 | sport/tennis/# | 合法 | sport/tennis/player1 sport/tennis/player1/rankingsport/tennis/player1/score/wimbledon | |
| 2 | sport/# | 合法 | sport sport/tennis sport/tennis/player1 sport/tennis/player1/rankingsport/tennis/player1/score/wimbledon | 多级通配符可匹配父级目录 |
| 3 | sport/tennis# | 非法 | 不满足【单独指定】或【主题级分隔符之后】 | |
| 4 | sport/tennis/#/ranking | 非法 | 不满足【主题过滤器 中指定的最后一个字符】 |
1.3 单级通配符+
加号 (‘+’ U+002B) 是一个通配符,仅匹配一个主题级别。
- 在使用它的地方,它必须占据过滤器的整个级别
- 主题过滤器中的多个级别使用,并且可以与多级通配符一起使用
举例:- 主题列表
- sport/tennis/player1
- sport/tennis/player1/ranking
- sport/tennis/player1/score/wimbledon
- 主题列表
| 序号 | 示例 | 合法状态 | 适配主题 | 备注 |
|---|---|---|---|---|
| 1 | sport/tennis/+ | 合法 | sport/tennis/player1 | |
| 2 | sport/+ | 合法 | sport/ sport/tennis | 单级通配符仅可匹配同级别主题,不可匹配子主题,也不可匹配父主题 |
| 3 | + | 合法 | sport | 单级通配符仅可匹配同级别主题 |
| 4 | +/tennis/# | 合法 | sport/tennis/player1 sport/tennis/player1/rankingsport/tennis/player1/score/wimbledon | |
| 5 | sport+ | 非法 | 不满足【必须占据过滤器的整个级别】 |
1.4 $开头的特殊主题
-
多级通配符#和单级通配符+不能匹配以$开头的特殊主题;
-
开头的特殊主题常用于特殊控制目的,例如
开头的特殊主题常用于特殊控制目的,例如
开头的特殊主题常用于特殊控制目的,例如SYS/,客户端不能定义以$开头的主题
-
如果客户端需要订阅
开头的主题,需要单独订阅
开头的主题,需要单独订阅
开头的主题,需要单独订阅主题,用法如下: + 例如
主题的名称为:
主题的名称为:
主题的名称为:SYS/monitor/Clients,则客户端订阅主题过滤器可以设置为: $SYS/monitor/+或$SYS/monitor/#
- 客户端要接收来自以 开头的主题的消息,它必须同时订阅“#”和“$SYS/#”
1.5 主题语法
- 所有主题名称和主题过滤器必须至少有一个字符长 [MQTT-4.7.3-1],主题分级标识符’/'也算占1个字节
- 主题名称和主题过滤器区分大小写
- 主题名称和主题过滤器可以包含空格字符
- 前导或尾随“/”创建不同的主题名称或主题过滤器
- topic和/topic、topic和topic/这两对都不是相同的主题名称
- 仅包含“/”字符的主题名称或主题过滤器是有效的
- 主题名称和主题过滤器不得包含空字符 (Unicode U+0000) [ Unicode ] [MQTT-4.7.3-2]
- 主题名称和主题过滤器是 UTF-8 编码的字符串,它们的编码不得超过 65535 字节 [MQTT-4.7.3-3]。见第 1.5.3 节
2. 错误处理
除非另有说明,如果服务器或客户端遇到协议违规,它必须关闭它收到导致协议违规的控制数据包的网络连接 [MQTT-4.8.0-1]。
客户端或服务器实现可能会遇到阻止成功处理 MQTT 数据包的瞬态错误(例如内部缓冲区已满情况)。
如果客户端或服务器在处理入站控制数据包时遇到瞬态错误,它必须关闭接收该控制数据包的网络连接 [MQTT-4.8.0-2]。如果服务器检测到瞬态错误,它不应该断开连接或对其与任何其他客户端的交互产生任何其他影响
《MQTT快速入门系列》快速导航:
- 【MQTT从入门到提高系列 | 01】从0到1快速搭建MQTT测试环境
- 【MQTT从入门到提高系列 | 02】MQTT3.1.1TLS加密传输
- 【MQTT从入门到提高系列 | 03】一文掌握MQTT3.1.1协议框架
- 【MQTT从入门到提高系列 | 04】MQTT应用协议之CONNECT
- 【MQTT从入门到提高系列 | 05】MQTT3.1.1之PUBLISH发布工作流
- 【MQTT从入门到提高系列 | 06】MQTT3.1.1之SUBSCRIBE订阅工作流
- 【MQTT从入门到提高系列 | 07】MQTT3.1.1之链路保活及断开
- 【MQTT从入门到提高系列 | 08】MQTT3.1.1主题Topic详解
- 【MQTT从入门到提高系列 | 09】WireShark抓包分析MQTT报文
写在末尾:
- 博客简介:专注AIoT领域,追逐未来时代的脉搏,记录路途中的技术成长!
- 专栏简介:从0到1掌握MQTT分布式协议。
- 面向人群:零基础编程爱好者
- 专栏计划:接下来会逐步发布跨入人工智能的系列博文,敬请期待
- Python零基础快速入门系列
- 快速入门Python数据科学系列
- 人工智能开发环境搭建系列
- 机器学习系列
- 物体检测快速入门系列
- 自动驾驶物体检测系列
- …
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新