首页 > 其他分享 >MQTT控制报文格式 -- SUBSCRIBE – 客户端订阅主题请求

MQTT控制报文格式 -- SUBSCRIBE – 客户端订阅主题请求

时间:2023-10-16 17:59:06浏览次数:36  
标签:订阅 QoS 报文格式 -- SUBSCRIBE 过滤器 byte 数据包

  • 订阅数据包从客户端发送到服务器以创建一个或多个订阅。 每个订阅都会登记客户对一个或多个主题的兴趣。 服务器向客户端发送 PUBLISH 数据包,以便转发已发布到与这些订阅匹配的主题的应用程序消息。 SUBSCRIBE 数据包还指定(对于每个订阅)服务器可以向客户端发送应用程序消息的最大 QoS。

1. 固定包头 Fixed header

固定包头的剩余长度= 可变包头长度 + payload长度

Bit

7

6

5

4

3

2

1

0

byte 1

MQTT Control Packet type (8)

Reserved

 

1

0

0

0

0

0

1

0

byte 2

Remaining Length

2. 可变包头 Variable header

可变包头会包含 数据包标识符(Packet Identifier),由2个字节构成
一个packet id=10 的样例如下:

 

Description

7

6

5

4

3

2

1

0

Packet Identifier

byte 1

Packet Identifier MSB (0)

0

0

0

0

0

0

0

0

byte 2

Packet Identifier LSB (10)

0

0

0

0

1

0

1

0

3. 载荷 Payload

  • SUBSCRIBE Payload 部分包含主题过滤器列表,指示客户端想要订阅的主题。使用UTF-8编码。
  • 服务端应该支持主题过滤器,如果服务端不支持,那么应该拒绝包含通配符的SUBSCRIBE 请求。
  • 每一个主题过滤器后面都有一个 QoS 字节,表示服务器可以向客户端发送消息的最大QoS 级别。
  • SUBSCRIBE消息的Paylaod 必须包含最少1个主题 和Qos 的数据,否则被认为是违反协议标准

数据包组成:

Description

7

6

5

4

3

2

1

0

Topic Filter

byte 1

Length MSB

byte 2

Length LSB

bytes 3..N

Topic Filter

Requested QoS

 

Reserved

QoS

byte N+1

0

0

0

0

0

0

X

X

Payload 样例:

Topic Name

“a/b”

Requested QoS

0x01

Topic Name

“c/d”

Requested QoS

0x02


 

Description

7

6

5

4

3

2

1

0

Topic Filter

byte 1

Length MSB (0)

0

0

0

0

0

0

0

0

byte 2

Length LSB (3)

0

0

0

0

0

0

1

1

byte 3

‘a’ (0x61)

0

1

1

0

0

0

0

1

byte 4

‘/’ (0x2F)

0

0

1

0

1

1

1

1

byte 5

‘b’ (0x62)

0

1

1

0

0

0

1

0

Requested QoS

byte 6

Requested QoS(1)

0

0

0

0

0

0

0

1

Topic Filter

byte 7

Length MSB (0)

0

0

0

0

0

0

0

0

byte 8

Length LSB (3)

0

0

0

0

0

0

1

1

byte 9

‘c’ (0x63)

0

1

1

0

0

0

1

1

byte 10

‘/’ (0x2F)

0

0

1

0

1

1

1

1

byte 11

‘d’ (0x64)

0

1

1

0

0

1

0

0

Requested QoS

byte 12

Requested QoS(2)

0

0

0

0

0

0

1

0

响应和动作 Response

  • 当服务端收到 SUBSCRIBE 数据包时,必须使用SUBACK 进行响应,SUBACK 中的 PacketIdentifier 必须与 SUBSCRIBE中的PacketIdtifier 相同。
  • 服务端呗允许在发送SUBACK数据包之前开发发送与订阅匹配的PUBLISH 数据包
  • 如果服务器收到包含与现有订阅的主题过滤器相同的订阅数据包,则它必须用新的订阅完全替换已有的。新订阅的主题过滤器与先前订阅的主题过滤器相同,尽管QoS 值可能不通,任何与主题过滤器匹配的现有保留消息都必须重新发送,使得发布流不中断。
  • 如果主题过滤器与现有任何过滤器不同,则会创建新的订阅并发送所有匹配的保留消息。
  • 如果服务器收到包含多个主题过滤器的SUBSCRIBE数据包,它必须像收到一系列多个SUBSCRIBE 数据包一样处理该数据包,只不过响应是单个的SUBACK。
  • 服务端发送给客户端的SUBACK 必须包含每个主题过滤器的返回代码。此返回代码必须显示该订阅授予的最大QoS 或失败消息。
  • 服务器可能会授予比订阅这请求的更低的最大QoS。
  • SUBACK 消息Payload 中的QoS 必须是原始发布消息的QoS和服务器授予的最大的QoS 中的最小值。

标签:订阅,QoS,报文格式,--,SUBSCRIBE,过滤器,byte,数据包
From: https://www.cnblogs.com/aimigi/p/17767970.html

相关文章

  • idea显示services
    打开idea以后底部没有services 做如下操作即可点击加号以后选择springboot 选择以后点击OK ......
  • MQTT控制报文格式 -- PUBREC – Publish received (QoS 2 publish received, part 1)
    PUBREC数据包是对QoS2的PUBLISH数据包的响应。它是QoS2协议交换的第二个数据包。该数据包剩余长度为2该数据包没有Payload该数据包可变包头长度为2个字节1.固定包头FixedHeaderBit76543210byte1MQTTControlPackettyp......
  • 《Mastering the FreeRTOS Real Time Kernel》读书笔记(7)事件组
    8.事件组之前已经介绍了多任务之间的交流桥梁,包括了队列和信号量。与队列和信号量不同:事件组允许任务在“阻塞”状态下等待一个或多个事件的组合发生。事件组在事件发生时,取消等待同一事件或事件组合的所有任务的阻塞状态。事件组的这些独特属性可用于同步多个任务、向多个任务......
  • What Is a DPU?
    一、Wikipedia介绍Adataprocessingunit(DPU)isaprogrammablecomputerprocessorthattightlyintegratesageneral-purposeCPUwithnetworkinterfacehardware.Sometimestheyarecalled"IPUs"(for"infrastructureprocessingunit")or&......
  • Linux SSH安全策略:限制IP登录方法与网站安全
    LinuxSSH安全策略:限制IP登录方法与网站安全步骤1:编辑SSH配置文件首先,我们先配置SSH配置文件以添加IP登录限制。打开终端并使用以下命令以root用户身份编辑SSH配置文件:sudonano/etc/ssh/sshd_config步骤2:配置IP登录限制在打开的配置文件中,找到并编辑以下行,确保其取......
  • 安装IK 分词器
    进入安装ES目录的plugins新建文件夹ikwgethttps://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.4.2/elasticsearch-analysis-ik-7.4.2.zipunzip下载的文件chmod-R777ik重启ESdocker容器进入ES镜像:dockerexec-itES镜像的containeri......
  • python学习之二位数组
    创建二维数组其实python没有数组的概念,是用list来代替的,创建其实可以直接写入行列式如下:也可以使用numpy,后面用到的话再写一篇运行结果如上从输入流写入数组目前只懂需要输入行跟列的二位数组,如果用到需要根据输入长度来判断的时候在补充 ......
  • vue 手机规则校验
    一、背景点击查看代码phone:[{required:true,message:'请输入手机号',trigger:'blur'},{min:11,max:11,message:'手机号位数不对',trigger:'blur'},{pattern:/^(13[0-9]|14[579]|15[0-3,5-9]|16......
  • 结构化开发杂题选讲
                   ......
  • 开源组件 | 一款好用的小程序生成图片库
    一、项目概述想到小程序中有如此大量的生成图片需求,而Canvas生成方法又是如此难用和坑爹(有关小程序的坑,可看 https://github.com/Kujiale-Mobile/MP-Keng )。我们就想到可不可以做一款可以很方便生成图片,并且还能屏蔽掉直接使用Canvas的一些坑的库呢?对此我们发起了“画家......