首页 > 其他分享 >MQTT控制报文格式 -- UNSUBSCRIBE– 客户端取消订阅请求

MQTT控制报文格式 -- UNSUBSCRIBE– 客户端取消订阅请求

时间:2023-10-17 09:11:19浏览次数:36  
标签:报文格式 -- Length Topic MQTT UNSUBSCRIBE byte 数据包 客户端

客户端向服务器发送取消订阅数据包,以取消订阅主题。

1. 固定包头 Fixed header

Bit

7

6

5

4

3

2

1

0

byte 1

MQTT Control Packet type (10)

Reserved

 

1

0

1

0

0

0

1

0

byte 2

Remaining Length

2. 可变包头 Variable header

可变包头用来传输 数据包标识符 PacketIdentifier

Bit

7

6

5

4

3

2

1

0

byte 1

Packet Identifier MSB

byte 2

Packet Identifier LSB

3. 载荷 Payload

UNSUBSCRIBE 数据包的Payload包含客户端希望取消订阅的主题过滤器列表。 用UTF-8编码。
UNSUBSCRIBE 数据包的有效负载必须包含至少一个主题过滤器。 没有有效负载的 UNSUBSCRIBE 数据包违反协议。

示例:

Topic Filter

“a/b”

Topic Filter

“c/d”

Payload 编码为:

 

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

Topic Filter

byte 6

Length MSB (0)

0

0

0

0

0

0

0

0

byte 7

Length LSB (3)

0

0

0

0

0

0

1

1

byte 8

‘c’ (0x63)

0

1

1

0

0

0

1

1

byte 9

‘/’ (0x2F)

0

0

1

0

1

1

1

1

byte 10

‘d’ (0x64)

0

1

1

0

0

1

0

0

4. 响应处理 Response

  • 服务器收到数据包后与UNSUBSCRIBE 中的Topic Filter 进行比对,如果匹配,则删除,否则不做任何处理。
  • 如果服务器删除成功,则停止添加发布该主题消息给客户端
  • 必须要完成已经开始发送到客户端的任何 QoS1 或 QoS2消息的传递
  • 服务端必须发送UNSUBACK数据包来响应UNSUBSCRIBE 的请求。
  • UNSUBACK数据包必须具有与UNSUBSCRIBE 相同的PacketIdentifier

标签:报文格式,--,Length,Topic,MQTT,UNSUBSCRIBE,byte,数据包,客户端
From: https://www.cnblogs.com/aimigi/p/17768881.html

相关文章

  • 二分
    二分二分是一种基于一个具有非严格单调性的序列上进行搜索的算法,其复杂度为\(O(logn)\),在单调性的前提下,效率碾压遍历不知道多少倍。原理我们以下图中长度\(n=10\)的非严格单调递增序列\(P\)为例假设此时我们询问一个数\(x\),我们需要在序列中找到一个数\(y\),使得\(y......
  • 架构设计如何绘图?
    很多同学技术能力很强,架构设计也做得很好,但是在给别人讲解的时候,总感觉像是“茶壶里煮饺子,有货倒不出”。其实,在为新员工培训系统架构、给领导汇报技术规划、上技术大会做演讲或者向晋升评委介绍工作贡献的时候,如果你能画出一张优秀的 软件系统架构图,就可以大大提升自己的讲解......
  • Siemens 西门子触摸屏SMART LINE如何通过下拉栏指定画面跳转?
    在跟学员的交流中发现有一些同学对于西门子去切换页面这一块有些需求,并且提到了有时画面很多用传统按钮切换的方法但有很多不好排版。针对这个问题有没有一些好的其他的方式实现多画面的一个切换呢。那在这里给大家介绍另外一种方式是通过下拉栏去切换画面。01前提条件......
  • Mitsubishi 三菱FX5U与NZ2MFB1-32DT输入输出模块CC-Link通讯
    01先点参数,系统参数,设置主机型号; 02点击“以太网端口”,进入画面选择CC-LinkIEFBasic设置中的“网络配置设置”; 03将NZ2MFB1-32DT输入输出模块拖拽出配置与本站同一网段的IP; 04点击CC-LinkIEFBasic设置中的“刷新设置”; 05设置刷新地址; 06设程序编写; 最后将......
  • 这篇记录一下C#和java中的http request的测试
    1.在c#中,测试http的,一般做一个mock的httpContext,然后里面的request和response都使用mock的,这样设置好后,就可以测试controller2.在java中,因为是httpservelet这些,所以实例化测试创建mock的httprequest这些https://www.baeldung.com/java-httpservletrequest-mock@Testvoid......
  • Webgl 基础以及canvasKit学习
    一基础概念1.关于canvas、webgl、skia、canvasKitctx.getContext('2d'/'webgl'/'webgl2');类型2d、webgl、webgl2有什么不同?canvas2d主要的性能问题就在于,绘制中间对象没法缓存,以及部分能力需要CPU计算这两点上。而canvaskit在提供了类似canvas2d的......
  • Siemens 西门子1200PLC支持的通信协议
    西门子系列PLC产品,功能比较强大。而在通信这块也是独树一帜,那么对于初学者来说,面对西门子1200PLC如此强大的通信功能,那在实际项目中该如何选择通信协议呢?本文我们将来了解1200PLC的通信功能。S7-1200CPU本体上集成了一个PROFINET通信口(CPU1211C-CPU1214C)或者两......
  • 图片基础知识
    图片基础知识像素点物理像素点设备像素比几倍图缩略图格式图(webp,jpeg,png,jpg,gif)尺寸大小阴影图片压缩图片分片上传图片分片渲染(几张图片渲染成一张大图)Buffer格式,如何渲染成图片?位图bigBitImage,如何渲染,哪种渲染图片更快?如何缓存位图?......
  • ahooks 源码实现
    ahooks库源码实现state模块useSetState功能点:1.实现类似class组件中setState功能,只更新传入的值,其他值不用更新;2.且可以穿入第二个回调函数参数同步获取更新后的最新state用于操作。import{useState}from'react';exportconstuseSetState=(init={})=>{c......
  • React-redux 中useSelector使用
    在一个action被分发(dispatch)后,useSelector()默认对select函数的返回值进行引用比较===,并且仅在返回值改变时触发重渲染。但是,不同于connect(),useSelector()并不会阻止父组件重渲染导致的子组件重渲染的行为,即使组件的props没有发生改变。useSelector源码分析import......