zoukankan      html  css  js  c++  java
  • MQTT协议中的topic

    1、MQTT协议中的topic

    定阅与发布必须要有主题,只有当定阅了某个主题后,才能收到相应主题的payload,才能进行通信。

    2、 主题层级分隔符——“/”

    主题层级分隔符使得主题名结构化。如果存在分隔符,它将主题名分割为多个主题层级。

    斜杠(‘/’ U+002F)用于分割主题的每个层级,为主题名提供一个分层结构。当客户端订阅指定的主题过滤器包含两种通配符时,主题层级分隔符就很有用了。主题层级分隔符可以出现在主题过滤器或主题名字的任何位置。相邻的主题层次分隔符表示一个零长度的主题层级。

    如主题:

    >>1  root/light
    >>2  root/tv/contrl/sensor
    >>3  root/tv/contrl/light
    >>4  root/airconditioning/sensor
    

    3、 多层通配符——“#”

    “#”是用于匹配主题中任意层级的通配符。多层通配符表示它的父级和任意数量的子层级。多层通配符必须位于它自己的层级或者跟在主题层级分隔符后面。不管哪种情况,它都必须是主题过滤器的最后一个字符 .

    例如,如果客户端订阅主题 “china/guangzhou/#”,它会收到使用下列主题名发布的消息:

    >>1  china/guangzhou
    >>2  china/guangzhou/huangpu
    >>3  china/guangzhou/tianhe/zhongshanlu
    >>4  china/guangzhou/tianhe/zhongshanlu/num123
    

    定阅主题示例

    >>1  school/# //也匹配单独的 “school” ,因为 # 包括它的父级。
    >>2  # //是有效的,会收到所有的应用消息。
    >>3  school/teacher/# //有效的。
    >>4  school/teacher# //无效的。
    >>5  school/teacher/#/lever //无效的,必须是主题过滤器的最后一个字符
    

    4、 单层通配符—-“+”

    加号是只能用于单个主题层级匹配的通配符。在主题过滤器的任意层级都可以使用单层通配符,包括第一个和最后一个层级。然而它必须占据过滤器的整个层级 。可以在主题过滤器中的多个层级中使用它,也可以和多层通配符一起使用。

    >>1  china/+ 只能匹配 china/guangzhou
    >>2  china/+/+/zhongshanlu 能匹配china/guangzhou/tianhe/zhongshanlu和china/shenzhen/nanshan/zhongshanlu
    

    5、 通配符 —-“$”

    通配符“$”表示匹配一个字符,只要不是放在主题的最开头,即:

    >>1  $xx
    >>2  /$xx
    >>3  /xx$
    

    其它情况下都表示匹配一个字符。

    如果客户端想同时接受以 “SYS/”开头主题的消息和不以“SYS/”开头主题的消息和不以 开头主题的消息, 它需要同时订阅 “#” 和 “$SYS/#”。

    6、 总结

    1. 所有的主题名和主题过滤器必须至少包含一个字符
    2. 主题名或主题过滤器以前置或后置斜杠 “/” 区分
    3. 只包含斜杠 “/” 的主题名或主题过滤器是合法的
    4. 主题名和主题过滤器是 UTF-8 编码字符串, 它们不能超过 65535 字节
    5. 主题名和主题过滤器是区分大小写的
  • 相关阅读:
    在浏览器中输入url后执行的全过程
    自己搭建一个类似vue,实现响应式的原理
    关于vue是怎么放到服务器上运行的基于vue-cli3
    vue v-modal语法糖
    js中的Map和Set
    js的reduce方法
    vue双向绑定原理
    js对象原型-class类
    (二)仅仅通过Application监听用户行为及App的在线状态和在线时长
    (一)仅仅用ApplicationContext加载界面
  • 原文地址:https://www.cnblogs.com/huang-yc/p/11836877.html
Copyright © 2011-2022 走看看