MQTT--topic
1、topic
定阅与发布必须要有主题,只有当定阅了某个主题后,才能收到相应主题的payload,才能进行通信。
2、 主题层级分隔符—“/”
主题层级分隔符使得主题名结构化。如果存在分隔符,它将主题名分割为多个主题层级。斜杠(‘/’ U+002F)用于分割主题的每个层级,为主题名提供一个分层结构。当客户端订阅指定的主题过滤器包含两种通配符时,主题层级分隔符就很有用了。主题层级分隔符可以出现在主题过滤器或主题名字的任何位置。相邻的主题层次分隔符表示一个零长度的主题层级。
如主题:
room212/electric
room212/tv/contrl/sensor
room212/tv/contrl/light
room212/air/sensor
3、 多层通配符—“#”
“#”是用于匹配主题中任意层级的通配符。多层通配符表示它的父级和任意数量的子层级。多层通配符必须位于它自己的层级或者跟在主题层级分隔符后面。不管哪种情况,它都必须是主题过滤器的最后一个字符 .
例如,如果客户端订阅主题 “china/xiangtan/#”,它会收到使用下列主题名发布的消息:
china/xiangtan
china/xiangtan/yuhu
china/xiangtan/yuetan/hnie
china/xiangtan/jiuhua/jiakao/kemusan
定阅主题示例
school/# //也匹配单独的 “school” ,因为 # 包括它的父级。
# //是有效的,会收到所有的应用消息。
school/teacher/# //有效的。
school/teacher# //无效的。
school/teacher/#/lever //无效的,必须是主题过滤器的最后一个字符
4、 单层通配符—-“+”
加号是只能用于单个主题层级匹配的通配符。在主题过滤器的任意层级都可以使用单层通配符,包括第一个和最后一个层级。然而它必须占据过滤器的整个层级 。可以在主题过滤器中的多个层级中使用它,也可以和多层通配符一起使用。
china/+ 只能匹配 china/guangzhou china/+/+/zhongshanlu 能匹配china/guangzhou/tianhe/zhongshanlu和china/shenzhen/nanshan/zhongshanlu
5、 通配符 —-“$”
通配符“$”表示匹配一个字符,只要不是放在主题的最开头,即:
$xx
/$xx
/xx$
其它情况下都表示匹配一个字符。
如果客户端想同时接受以 “SYS/”开头主题的消息和不以 开头主题的消息, 它需要同时订阅 “#” 和 ““$SYS/#”。
6、 总结
1、所有的主题名和主题过滤器必须至少包含一个字符
2、主题名或主题过滤器以前置或后置斜杠 “/” 区分
3、只包含斜杠 “/” 的主题名或主题过滤器是合法的
4、主题名和主题过滤器是 UTF-8 编码字符串, 它们不能超过 65535 字节
5、主题名和主题过滤器是区分大小写的
主题层级分隔符 / : 用于分割主题层级,/分割后的主题,这是消息主题层级设计中很重要的符号。 比方说: aaa/bbb和 aaa/bbb/ccc 和aaa/bbb/ccc/ddd ,这样的消息主题格式,是一个层层递进的关系,可通过多层通配符同时匹配两者,或者单层通配符只匹配一个。 这在现实场景中,可以应用到:公司的部门层级推送、国家城市层级推送等包含层级关系的场景。
单层通配符 +: 单层通配符只能匹配一层主题。比如: aaa/+ 可以匹配 aaa/bbb ,但是不能匹配aaa/bbb/ccc。 单独的+号可以匹配单层的所有推送
多层通配符 #: 多层通配符可以匹配于多层主题。比如: aaa/# 不但可以匹配aaa/bbb,还可以匹配aaa/bbb/ccc/ddd。 也就是说,多层通配符可以匹配符合通配符之前主题层级的所有子集主题。单独的#匹配所有的消息主题.
注: 单层通配符和多层通配符只能用于订阅(subscribe)消息而不能用于发布(publish)消息,层级分隔符两种情况下均可使用。
MQTT--topic的更多相关文章
- 由MQTT topic的正则表达式匹配引发的特殊字符"/"匹配思考
正则表达式中的'/'替换 近期项目对接OneNET的MQTT物联网套件,需要完成命令下发流程. 流程要求: (1)设备在接收平台下发的命令(topic为$sys/{pid}/{device-name} ...
- 【002:ESP8266 移植 Mqtt 】
系统环境: ubuntu 16.04 64bitSDK版本: esp_iot_sdk_v1.3.0记录时间: 2016年10月13日联系方式: yexiaopeng1992@126.com 背景:在E ...
- AMQP && MQTT comparision
1. AMQP (Advanced Message Queuing Protocol) 2. MQTT (Message Queuing Telemetry Transport) Introducti ...
- MQTT事件回调流程
TLS 如下强调: 1.每个IOT设备应该有一对独有的公钥/私钥 2.SERVER的认证通过SERVER的"root certificate" SSL产生过程: $ openssl ...
- MQTT 协议是个啥?这篇文章告诉你!
文章首发于我的公众号「程序员cxuan」,欢迎大家关注呀- 说到做到! 之前有位读者给我留言说想要了解一下什么是 MQTT 协议,顺便还把我夸了一把,有点不好意思啦. 那么读者的要求必须要满足啊,所以 ...
- MQTT 4 ——MQTT的Spring Mvc 配置接收字节流数据
本篇记录一下MQTT整合Spring Mvc配置直接收发字节流数据 设备方是纯C开发,并且为了交互数据的安全,将传送的数据用了AES CBC进行了加密. 接下来正常方便做法应该是 将加密后的字节流转换 ...
- MQTT 3 ——MQTT与Spring Mvc整合
本篇记录一下MQTT客户端与Spring Mvc整合 网络上已经有很多的MQTT客户端与SpringBoot整合的技术文档,但是与Spring Mvc框架的整合文档似乎并不太多,可能是因为Spri ...
- ansible-2.1.0.0_module
ansible --version ansible 2.1.0.0 config file = /home/onest/luoliyu/ceph-ansible/ansible.cfg configu ...
- Home Assistant-自动化设备
触发器(trigger) 条件(condition) 动作(action) 自动化中的模板(template) 触发器(trigger) 时间(time)触发器时间触发器在指定的时间触发规则,可以是某 ...
- Mosquitto-1.5在Linux上的安装以及Android客户端的实现
一.关于MQTT MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的" ...
随机推荐
- Appium+python自动化19-iOS模拟器(iOS Simulator)安装自家APP【转载】
前言 做过iOS上app测试的小伙伴应该都知道,普通用户安装app都是从appstore下载安装,安装测试版本的app,一般就是开发给的二维码扫码安装, 或者开发给个.ipa的安装包文件,通过itoo ...
- 【原创】DQS安装失败——系统重新引导是否处于挂起状态
问题: 安装完SQL Server 2012后,准备安装DQS服务,但是总是提示:操作“检查系统重新引导是否处于挂起状态”已完成,但有错误,正在中止安装.非常无奈,因为都根据其要求重启 ...
- 计蒜客 28317.Growling Gears-一元二次方程的顶点公式 (Benelux Algorithm Programming Contest 2014 Final ACM-ICPC Asia Training League 暑假第一阶段第二场 G)
G. Growling Gears 传送门 此题为签到题,直接中学的数学知识点,一元二次方程的顶点公式(-b/2*a,(4*a*c-b*b)/4*a):直接就可以得到结果. 代码: #include& ...
- Python与正则表达式[0] -> re 模块的正则表达式匹配
正则表达式 / Regular Expression 目录 正则表达式模式 re 模块简介 使用正则表达式进行匹配 正则表达式RE(Regular Expression, Regexp, Regex) ...
- ACdream1032(树形DP)
ACdream1032 题意 给出一棵树,每个节点有权值,问由 \(1\) ~ \(n\) 个节点组成的树块的权值和的最小值. 分析 首先发现 \(n\) 很小,那么我们可以开一个二维数组 \(dp[ ...
- Tarjan缩点【p1726】上白泽慧音
Description 在幻想乡,上白泽慧音是以知识渊博闻名的老师.春雪异变导致人间之里的很多道路都被大雪堵塞,使有的学生不能顺利地到达慧音所在的村庄.因此慧音决定换一个能够聚集最多人数的村庄作为新的 ...
- 最基础的java
一.Window中常见的dos命令 在哪里操作dos命令: Win7 ---> 开始 ---->所有程序--->附件---->命令提示符 Win7--> 开始 -- ...
- First Missing Positive -- LeetCode
Given an unsorted integer array, find the first missing positive integer. For example,Given [1,2,0] ...
- BZOJ 3864 Hero Meets Devil
题目大意 给定一个由AGCT组成的串\(t\), 求对于所有的\(L \in [1, |t|]\), 有多少个由AGCT组成的串\(s\)满足\(LCS(s, t) = L\). Solution 传 ...
- 动态规划 001 - 编辑距离(Levenshtein Distance)问题
问题 字符串的编辑距离也被称为距Levenshtein距离(Levenshtein Distance),属于经典算法,常用方法使用递归,更好的方法是使用动态规划算法,以避免出现重叠子问题的反复计算,减 ...