Toggle navigation
首页
(current)
问答
文章
话题
商城
登录
注册
MQTT主题的通配符
mqtt
MQTT主题的通配符使用技巧。
做二次开发时,开发者可能会面临一个窘境: > 设备百千万,识别怎么办? 心里很烦乱,后端直哭惨。 所以,为了区分不同的设备,通常建议开发者对MQTT的发布和订阅的主题做细分,以做到对设备的精确控制。 ###区分设备 --- 嵌入式开发时,开发者应该将设备的主题规划如下: 订阅:/sys/device/8685754894158765/ctrl 上报:/sys/device/8685754894158765/reply 其中```8685754894158765```就是设备的**IMEI**。如此一来,只要服务端向某个设备的**ctrl**主题发布数据,设备收到后即可做出相应响应;设备也可以根据自己的逻辑,及时上报数据到**reply**主题。 如此一来,每个设备的逻辑很清晰了,但是服务端端呢?难道要去订阅每一个设备的不同主题吗?实际上并不复杂哦,使用MQTT的通配符就能轻松解决。 ##通配符 ###主题层级 譬如在上文的例子中: 订阅:/sys/device/8685754894158765/ctrl 上报:/sys/device/8685754894158765/reply 每一个 ```/``` 都是分隔符,用来分割主题的每一层级。以**订阅**的主题为例,它就被分割成了4个层级: /sys/device/8685754894158765/ctrl 层级1. sys 层级2. device 层级3. 8685754894158765 层级4. ctrl 不要小看层级哦,区分设备,使用通配符,全靠他们了。 ###多层通配符```#``` --- ```#``` 是可以匹配主题中任意层级次数的通配符。 比如,如果你订阅了 ```/sys/device/#```,那么,你可以接收到以下这些主题的消息: /sys/device /sys/device/8685754894158765/reply /sys/device/8685754894158766/reply /sys/device/8685754894158767/reply /sys/device/abce/efg/h/ijkl ... 通过示例我们可以看出,```#```可以匹配大于等于0的层级。 服务端使用通配符 ```#``` 订阅主题。设备上报数据,服务端收到数据后,再根据设备的上报的 **真实主题** 和 **payload** 进行处理。 ###单层通配符```+``` --- ```+``` 只可匹配主题的某一层级。 比如,如果你订阅了 ```/sys/device/+```,那么,你可以接收到以下这些主题的消息: /sys/device/8685754894158765 /sys/device/8685754894158766 /sys/device/8685754894158767 /sys/device/abce ... 但是不能收到如下主题的消息: /sys/device/8685754894158767/reply /sys/device/abce/efg/h/ijkl /sys/device 因为他们都超过了 ```+``` 1层级的要求。需要注意的是,```/sys/device```因为是0层级,所以也不符合要求,无法收到数据。 ###延伸用法 1. 如果开发者想要订阅所有主题,那么连接到服务器后,订阅 ```#``` 就可以啦; 2. ```/sys``` 和 ```sys``` 是两个不同的主题。所以,如果开发者想要使用 ```+``` 订阅 ```/sys```,那么要写成这样:```+/+``` ; 3. 小心使用 ```#```,以免造成不可预估的后果; 4. 主题中的其他字符,如 ```*``` 、 ```$``` 等,均当作普通字符串处理,无其他特殊含义。
发表于 2018-09-17 07:34
阅读 ( 3045 )
分类:
默认分类
2 推荐
打赏
收藏
你可能感兴趣的文章
11、RDA8910CSDK二次开发:新鲜出炉的MQTT库
7852 浏览
Air系列4G模块AT版本MQTT应用说明
6303 浏览
教你用Air720 模块通过AT指令以MQTTS方式连接华为云(下篇)
4411 浏览
教你用Air720 模块通过AT指令以MQTTS方式连接华为云(上篇)
6116 浏览
腾讯云通信参数计算工具
1933 浏览
合宙720开发板连接阿里云MQTT
6715 浏览
相关问题
Air202模块连接阿里云MQTT,如何用Lua计算password?
0 回答
怎么在MQTT SSL连接时的添加自己ca证书验证
1 回答
air202,用mqtt协议连接onenet平台(lua)。
1 回答
Air720H 怎样通过 MQTT服务发送图片?
1 回答
air 202的mqtt使用时,模块上报usr为MQTT HEART NO ACK,该怎么处理
1 回答
Air202 MQTT发布消息
1 回答
0 条评论
请先
登录
后评论
技术销售Delectate
43 篇文章
作家榜
»
技术销售Delectate
43 文章
陈夏
26 文章
国梁
24 文章
miuser
21 文章
晨旭
20 文章
朱天华
19 文章
金艺
19 文章
杨奉武
18 文章
×
发送私信
发给:
内容:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!