首页 > 其他分享 >MQTT 主题通配符和过滤器Topic Wildcards & Topic Filters

MQTT 主题通配符和过滤器Topic Wildcards & Topic Filters

时间:2023-10-18 10:23:38浏览次数:30  
标签:Wildcards 订阅 tennis SYS 主题 通配符 Topic MQTT sport

  • 主题名称中引入了级别分隔符 /, 用于分割主题级别,如果存在,它将主题名称划分为多个“主题级别”。
  • 订阅的主题过滤器可以包含特殊的通配符,可以一次订阅多个主题。
  • 特殊字符的通配符可以用在订阅过滤器中,但是不能用于主题名称

1. 主题级别

  • "/" 用于分割主题级别,并为主题名称提供层次结构。
  • 当订阅客户但指定的主题过滤器中遇到两个通配符中的任意一个时,分隔符的使用非常重要。
  • 级别分隔符可以出现在主题名称的任意位置。
  • 两个相邻的分隔符// 表示0长度的主题级别

1.1 订阅通配符"#"

  • "#"匹配的是分隔符之后的任意级别,且包含父级
  • "#"只能是过滤器的最后一个字符
    例如,如果客户端订阅“sport/tennis/player1/#”,它将收到使用这些主题名称发布的消息:
"sport/tennis/player1”
“sport/tennis/player1/rank”
“sport/tennis/player1/score/wimbledon”

sport/# 可以匹配 sport 主题,因为# 包括父级
单个的 # 也是有效的,这将收到服务端任何消息
sport/tennis/# 有效
sport/tennis# 无效
sport/tennis/#/ranking 无效

1.2 订阅通配符 "+"

  • "+" 表示单级别通配符,可以在过滤器中的任何级别使用,包括第一级和最后一级

例如:
"sport/tennis/+"
匹配
"sport/tennis/payler1" 和 "sport/tennis/payler2"
但是不匹配
“sport/tennis/player1/ranking”
由于单级通配符仅匹配单个级别,因此“sport/+”不匹配“sport”,但它匹配“sport/”

另外

  • 单个 "+" 有效,匹配单级主题
  • “+/tennis/#” 有效
  • “sport+” 无效
  • “sport/+/player1” 有效
  • “/finace” 和 “+/+” 以及 “/+” 匹配,但是和 “+”不匹配

2. $开头的主题

服务器存储的主题名称不能以通配符(#或+)开头。
但是主题名称可以以$开头,$开头的主题已经被广泛采用,作为包含服务器特性信息或控制API的前缀

  • 非规范评论
  1. 应用程序不能用$前缀做业务主题
  2. 订阅“#”将不会收到任何发布到以 $ 开头的主题的消息
  3. 订阅“+/monitor/Clients”将不会收到任何发布到“$SYS/monitor/Clients”的消息
  4. 订阅“$SYS/#”将收到发布到以“$SYS/”开头的主题的消息
  5. 订阅“$SYS/monitor/+”将收到发布到“$SYS/monitor/Clients”的消息
  6. 为了让客户端接收来自以 $SYS/ 开头的主题和不以 $ 开头的主题的消息,它必须同时订阅“#”和“$SYS/#”

标签:Wildcards,订阅,tennis,SYS,主题,通配符,Topic,MQTT,sport
From: https://www.cnblogs.com/aimigi/p/17771235.html

相关文章

  • MQTT QoS 工作流程
    MQTT根据此处定义的服务质量(QoS)级别传送应用程序消息。传送协议是对称的,在下面的描述中,客户端和服务器各自可以充当发送者或接收者的角色。传送协议仅涉及将应用程序消息从单个发送方传送到单个接收方。当服务器向多个客户端传递应用程序消息时,每个客户端都会被单独处理......
  • C# M2Mqtt组件连接失败后占用大量cpu不释放以及重复用一个client进行重连会出现假连接
    M2Mqtt是C#的一个mqtt客户端库,这个库很好用,但是它有严重的Bug当我们调用Connect建立连接时,如果身份认证失败,它会返回状态码3,即"连接已拒绝,不合格的客户端标识符",但是其内部的异步线程并不会终止,依然会占用大量的cpu资源,即使Disconnect且把client置为null也没用,除非彻底关闭程序......
  • 理解MQTT协议(v3.1.1)
    1.概述MQTT协议概述2.数据包详解ControlPackets即14种MQTT类型的消息的二进制定义,本人按对协议的个人理解分别详述如下:CONNECT连接请求CONNACK连接请求应答PUBLISH发布消息PUBACK发布应答PUBREC发布收到QoS2消息收到PUBREL发布释放QoS2消息收到PUBCOMP......
  • MQTT控制报文格式 -- UNSUBACK – 取消主题订阅应答
    UNSUBACK数据包由服务器发送到客户端以确认收到UNSUBSCRIBE数据包。该数据包不包含Payload,所以剩余长度为2,即2字节的可变包头长度。1.固定包头FixedheaderBit76543210byte1MQTTControlPackettype(11)Reserved 1......
  • MQTT控制报文格式 -- PINGREQ – ping请求
    PINGREQ数据包从客户端发送到服务器。它可用于:在没有任何其他控制数据包从客户端发送到服务器的情况下,向服务器指示客户端处于活动状态。请求服务器响应以确认其处于活动状态。测试网络以指示网络连接处于活动状态。该数据包不需要可变包头,没有Payload部分其固定包头格式......
  • MQTT控制报文格式 -- UNSUBSCRIBE– 客户端取消订阅请求
    客户端向服务器发送取消订阅数据包,以取消订阅主题。1.固定包头FixedheaderBit76543210byte1MQTTControlPackettype(10)Reserved 10100010byte2RemainingLength2.可变包头Variab......
  • MQTT控制报文格式 -- SUBACK – 订阅应答
    SUBACK数据包由服务器发送到客户端以确认SUBSCRIBE数据包的接收和处理。SUBACK数据包包含返回代码列表,指定在SUBSCRIBE请求的每个订阅中授予的最大QoS级别1.固定包头Fixedheader固定包头的剩余长度=可变包头(2字节)+Payload长度Bit765432......
  • MQTT控制报文格式 -- SUBSCRIBE – 客户端订阅主题请求
    订阅数据包从客户端发送到服务器以创建一个或多个订阅。每个订阅都会登记客户对一个或多个主题的兴趣。服务器向客户端发送PUBLISH数据包,以便转发已发布到与这些订阅匹配的主题的应用程序消息。SUBSCRIBE数据包还指定(对于每个订阅)服务器可以向客户端发送应用程序消息的最大......
  • MQTT控制报文格式 -- PUBREC – Publish received (QoS 2 publish received, part 1)
    PUBREC数据包是对QoS2的PUBLISH数据包的响应。它是QoS2协议交换的第二个数据包。该数据包剩余长度为2该数据包没有Payload该数据包可变包头长度为2个字节1.固定包头FixedHeaderBit76543210byte1MQTTControlPackettyp......
  • MQTT控制报文格式 -- PUBREL – Publish release (QoS 2 publish received, part 2)
    PUBREL数据包是对PUBREC数据包的响应。它是QoS2协议交换的第三个数据包。该数据包剩余长度为2该数据包没有Payload该数据包可变包头长度为2个字节1.固定包头FixedHeaderBit76543210byte1MQTTControlPackettype(6)R......