MQTT主题
  • MQTT的主题是一个utf-8编码的字符串,最大长度65535字节,严格区分大小写

  • MQTT主题支持分层结构,主题分隔符用'/'表示,主题的层级长度可以为0

    # 将主题划分为3个层级
    'level1/level2/level3'
    # 第二层级长度为0
    'level1//level3 '
    # 下面三个level 实际属于三个不同的主题 , /前后如果没有内容视为一个长度为0的层级
    '/level'
    'level'
    'level/'
  • 主题层级的一个作用是和通配符配合使用消息分发和主题订阅,可以使用通配符实现一次订阅多个主题的效果

主题通配符
  • 单层通配符: 用 '+'表示,可以匹配当前层级主题下的任意内容,不能同时匹配多个层级,单层通配符可以在一个主题中多次使用

  • # 三个主题,楼层下有三个房间,房间里面有对应的信息,第三个房间区分大房间标识
    topic1 = 'floor/room1/info'
    topic2 = 'floor/room2/info'
    topic3 = 'floor/room3/big/info'
    # 使用#匹配 楼下下 任意房间 的info
    # 单层通配符每次只匹配一个层级,所有无法匹配到topic3的主题
    'floor/+/info' # 匹配主题1和主题2 # 同一主题中使用多个单层通配符
    'floor/+/+/info' #匹配主题3,每个通配符匹配一个层级 # 特殊主题
    # 这种主题需要视为/前有长度为0的层级
    topic = '/floor'
    #匹配模式
    '+/floow'
    '+/+'
  • 多层通配符: 用'#'表示,如果主题层级数量不固定,那么单层通配符想做某一模式的通用匹配就失去了效果,可以使用多层通配符,多层通配符可以匹配任意数量个层级,包括0个层级,因为多层通配符匹配层级的不确定性,多层通配符必须是主题的最后一个字符

  • topic1 = 'home/'
    topic2 = 'home/floor'
    topic3 = 'home/floor/room' # 匹配home下的所有层级
    'home/#'
  • 单层和多层通配符可以同时使用,主题通配符必须完全的占用一个层级

  • '''
    home/+/#
    +/+/#
    +/#
    '''
  • 只有在订阅和取消订阅的时候,才支持使用主题通配符,达到一次订阅/取消订阅多个主题的目的,在发布消息的时候,不支持使用主题通配符,必须要明确发送消息的主题,所以在订阅和取消订阅时候的主题称为主题过滤器,发布的时候的主题称为主题名

特殊主题
  • 特殊主题概述

mqtt对主题没有过多限制,可以任意命名,但是在主题中有一种特殊主题,是以$开头的主题,被保留为仅供服务端使用,客户端被禁止使用,不能发布消息,但是客户端可以订阅该主题只接收服务端的发的一些消息

  • 订阅$开头的主题

    订阅$开头的主题,$所在层级不能使用通配符匹配,但是$之后的层级可以使用通配符匹配

    topic = '$SYS/enter/content'
    
    '$SYS/+/content'
    '$SYS/#'
    #不能直接使用通配符匹配$所在层级
主题使用的一些建议
  • 主题可以视为发布订阅的核心,所以设计主题是重中之重

  • 不建议以/开头或者结尾

    以/开头或者结尾是协议允许的用法,但是并没有什么实际意义,还容易造成混淆,所以不建议主题以/开头或者结尾

    比如 /a 和a/ ,在前后有对应的长度为0的层级,需要额外匹配,也没有实际意义

  • 建议使用ASCLL字符

    mqtt主题定义只要是utf8字符串即可,但是在实际应用中,非ascll字符可能会遇到无法打印或者打印错误的问题,对于一些问题定位不太友好

  • 不在主题中使用空格

    如果主题中在层级中包含空格,但是使用过程中,我们肉眼很难区分是否有空格,所有也不建议使用空格

  • 尽量使用简洁的主题

    主题存在于我们订阅和收发消息的所有场景,使用不会引起歧义的缩写,简洁明了,缩短主题长度,对单个消息影响不大,如果消息量级特别大,带来的收益就比较可观了,简短的主题都有助于我们减少带宽消耗和提升处理效率

  • 不建议使用#订阅所有主题

    单独用#订阅所有主题,会订阅所有消息,很可能消息量庞大或者接收一些意外的消息,影响性能和实际效果,最好是配合前置层使用#匹配

  • 在主题中包含标识信息

    在主题中包含一些标识信息,比如客户端ID 、所属组、位置等,可以实现更灵活和精确的控制

MQTT-主题基础的更多相关文章

  1. MQTT主题Topic讲解

    文章转载于https://www.cnblogs.com/hayasi/p/7792191.html 我们已经把相关的连接报文搞定了.笔者想来想去还是决定先讲解一下订阅报文(SUBSCRIBE ).如 ...

  2. MQTT 嵌入式端通讯协议解析(转)

    MQTT,目前物联网的最主要的协议,基本所有收费的云平台都是基于MQTT协议,比如机智云,和所有的开放云平台比如中国移动的oneNet.百度的云平台也都支持MQTT的接入.虽然MQTT很火,但是目前对 ...

  3. 深度剖析MQTT协议的整个通信流程

    http://www.elecfans.com/d/587483.html MQTT,目前物联网的最主要的协议,基本所有收费的云平台都是基于MQTT协议,比如机智云,和所有的开放云平台比如中国移动的o ...

  4. MQTT结构分析

    MQTT,是: 轻量级的消息订阅和发布(publish/subscribe)协议 建立在TCP/IP协议之上 IoT,internet of things,物联网,MQTT在这方面应用较多. 官方网站 ...

  5. mqtt第一次接触

    一.接触的原因 公司最近要求接手关于系统集成道闸的部分,其中系统和第三方系统是通过mqtt进行交互的.所以提前了解一下mqtt的基础概念. 二.mqtt的基本概念 1. mqtt的定义 Message ...

  6. 为什么最近每份 Android 简历都说 “熟悉 MQTT 协议”?

    请点赞关注,你的支持对我意义重大. Hi,我是小彭.本文已收录到 GitHub · AndroidFamily 中.这里有 Android 进阶成长知识体系,有志同道合的朋友,关注公众号 [彭旭锐] ...

  7. Struts2的模板和主题theme及自定义theme的使用

    Struts2的模板和主题theme及自定义theme 标签: struts2 2016-03-29 11:22 190人阅读 评论(0) 收藏 举报  分类: javaweb(8)  Struts2 ...

  8. VS2012 黑色护眼主题

    在黑色主题基础上,更改了字体 Ms Comic Sans 字号也增大了 附件中有两个 一个是原版主题下载自https://studiostyl.es/ 第二个是如下改完后的主题 vssettings. ...

  9. 使用Material Design 创建App翻译系列----材料主题的使用(Using Material Theme)

    上一篇是使用Material Design 创建App翻译系列--開始学习篇,进入正题: 新的材料主题提供了下面内容: 1. 提供了同意设置颜色板的系统部件组件. 2. 为这些系统组件提供了触摸反馈动 ...

  10. Magento 2 Theme Ultimate Guide - 如何创建Magento 2主题终极指南

    Magento 2 Theme Ultimate Guide - 如何创建Magento 2主题基础指南 在Magento 2中管理和设置主题的方式有很多改进.Magento 1.9中引入的theme ...

随机推荐

  1. ES搜索高亮分词排序聚合搜索

    分词高亮搜索代码 List<A> list = new ArrayList<>(); //设置高亮显示 HighlightBuilder highlightBuilder = ...

  2. AI技术网关如何用于安全生产监测?有什么优势?

    现代工业生产和运营的规模越来越庞大.系统和结构越来越复杂,现场的风险点多面广,给作业一线的安全监管带来极大的挑战.针对工地.煤矿.危化品.加油站.烟花爆竹.电力等行业的安全生产监管场景,可以借助AI智 ...

  3. git 拉取远端别的分支的代码,并创建本地分支

    创建本地分支 new_dev, 并且拉取远端new_dev的代码到本地new_devgit checkout -b new_dev origin/new_dev

  4. 在Windows上访问linux的共享文件夹

    1. https://blog.csdn.net/weixin_44147924/article/details/123692155

  5. python requests 上传文件_python3使用requests上传文件,content-type踩的坑

    通常提交普通表单时,requests的post方法可以指定headers,所以我在使用requests模拟上传文件行为时,直接按照下面的方式写了: 然后服务器就报出了找不到分隔符Invalid mul ...

  6. [imx6ull][nand] uboot烧录固件

    背景 在调试阶段使用nxp的mfg-tools烧录比较麻烦,故考虑使用uboot指令实现固件烧录 烧录方法 //烧写内核 nand erase 0x4000000 0x800000 tftp zIma ...

  7. cmd查看对应端口使用情况

    cmd查看端口号netstat -ano | findstr 80

  8. python abseil库(app, flags, logging)总结

    absl (Abseil PythonCommon Libraries)(https://abseil.io/docs/python/)是用于构建Python应用程序的Python库代码集合,它包括三 ...

  9. 别再傻傻分不清 AVSx H.26x MPEG-x 了

    在音视频发展的历程中,编解码无疑是其最核心的功能,编解码标准的更新换代也极大促进了音视频技术的发展以及行为模式的变更.从电视到网络视频以及现在的网络直播.点播.音视频会议等等,这些变化的背后都离不开音 ...

  10. Java并发夺命50问

    本文已经收录到Github仓库,该仓库包含计算机基础.Java基础.多线程.JVM.数据库.Redis.Spring.Mybatis.SpringMVC.SpringBoot.分布式.微服务.设计模式 ...