MQTT——取消订阅报文和断开连接报文
笔者已经把连接报文,订阅报文,发布报文都讲解了完了。而接下来就是取消订阅报文和断开连接报文。和其他的报文比较的话,他们显示非常简单。甚至笔者觉得可以不必要拿出来讲。只要看一下MQTT文档就没有什么不清楚的。为了完整一点笔者就把他们放在一直了。
取消订阅报文
固定报头的结构笔者不都说了。主要记得固定报头的QOS为1就行了。笔者把官方的列表贴过来了。如下

我们知道固定报头分三部分,一个是报文类型,一个是报文标示。一个是剩余长度。取消订阅报文类型的值为10。然后我们看QOS 为1。对应的二进制为10100010。Remaining Length为剩余长度,同样子二进制为八位。所以固定报头的二进制一定是10100010 xxxxxxxx。
xxxxxxxx表示剩余长度的二进制。后面笔者还会抓包来看。
可变报头里面就一个消息ID的项。没有其他的。
有效载何里面存放的是主题列表。就是用于取消订阅的主题列表。如下

笔者不知道到现还有没有人看不懂这种列表的。Topic Filter为主题过滤,即是主题名。而byte 1类似这种表示每一元素。比如上面举列中的Topic Filter是有五元素组成的。后面是每一个元素的二进制。
MQTT 文档里面对取消订阅报文并没有特别的要求。也只是删除的动作做了一些要求。删除这个订阅的时候,就必须停止发送任何信息了。同时如果有正在分送中的QOS 1 QOS2的信息就必须要完成才行。当然也可以分送准备的缓存信息。
上面我们看到了取消订阅报文的QOS为1。所以会有一个回应。即是取消订阅确定报文(UNSUBACK)。取消订阅确定报文(UNSUBACK)只有固定报头和可变报头,可变报头里面只有一个消息ID的项。没有什么可说的。
相关的包
取消订阅报文

取消订阅确定报文

我们可以看到取消订阅报文有多么的简单,但是还是不如断开连接报文来的简单。因为断开连接报文没有可变报头,没有有效载荷。就一个固定报头。没有错就是一个固定报头。不多说,笔者把固定报头的列表贴出来。如下

上面的列表就是断开连接报文的全部。
断开连接报的结构是最简单的。但是文档中还是指出了几点要注意的。
1)判断固定报头中的标示部分必须是0000,如果不是0就断开连接。
2)客户端不能在通过该连接发送任何信息了。
3)服报端要删除与当前连接关联的未发布的遗嘱消息。同时如果客户端没有断开的话,服务端必须断开。
断开连接报文

MQTT——取消订阅报文和断开连接报文的更多相关文章
- MQTT——连接报文
学习MQTT协议.如果只是看了相关文档就认为可以了.那是一个错误的观念.笔者为了能更好的去理解MQTT协议.看了不少相关的开源Broker的项目.可惜这些项目一般都是不完全的.不过从这些项目中笔者至少 ...
- MQTT——编写连接报文
笔者在上一章对连接报文进行了相关的讲解.这一章笔者想写一个连接报文的例子来加深理解.本来这一章也应该在上一章出现的.可是笔者怕太长了.不好方便阅.所以决定分俩章来.正如笔者上一章所讲的.笔者会用Net ...
- mqtt已断开连接(32109)
在rabbitmq下使用mqtt协议时,如果服务质量(qos)设置为2,在发布服务时会出现[已断开连接 (32109) - java.io.EOFException]的报错. 出现该报错的其他情况还有 ...
- TCP3次握手连接协议和4次握手断开连接协议
TCP/IP 状态机,如下图所示: 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接,如图1所示. (SYN包表示标志位syn=1,ACK包表示标志位ack=1,SYN+A ...
- TCP建立连接和断开连接图解
参考博客: http://blog.csdn.net/whuslei/article/details/6667471 http://www.2cto.com/net/201310/251896.htm ...
- http请求报文格式和响应报文格式
转载 出处 超文本传输协议(Hypertext Transfer Protocol,简称HTTP)是应用层协议.HTTP 是一种请求/响应式的协议,即一个客户端与服务器建立连接后,向服务器发送一个请求 ...
- MQTT 发布者订阅者
添加依赖: <dependency> <groupId>org.eclipse.paho</groupId> <artifactId>org.eclip ...
- TCP建立连接和断开连接过程
假设Client端发起中断连接请求,也就是发送FIN报文.Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了",但是如果你还有数据没有发送完成,则不必急着 ...
- TCP四次挥手断开连接详解
TCP四次挥手. 数据传输结束后,通信的双方都可释放连接.现在A和B都处于ESTABLISHED状态.A的应用程序先向TCP发出连接释放报文段,主动关闭TCP连接.A把连接释放报文段的首部FIN置为1 ...
随机推荐
- HAProxy 日志输出及配置
正所谓,没有软件敢说没有bug,人无完人,software is not perfect software.是软件就可能存在bug,那么如果出现bug,我们就要分析对我们业务的影响及可能如何避免bu ...
- Scrum与看板区别
看板:在制品(work-in-progress, WIP)必须被限制 WIP上限和拉动式生产 1. Scrum与看板简述 Scrum:组织拆分,工作拆分,开发时间拆分,优化发布计划,过程优化 看板 ...
- nginx通过https方式反向代理多实例tomcat
案例说明:前面一层nginx+Keepalived部署的LB,后端两台web服务器部署了多实例的tomcat,通过https方式部署nginx反向代理tomcat请求.配置一如下: 1)LB层的ngi ...
- C. Multiplicity
链接 [http://codeforces.com/contest/1061/problem/C] 题意 给你一个数组,让你找有多少个子串(并非连续,但相对位置不能换),满足bi%i==0; 分析 d ...
- C. Make It Equal
链接 [http://codeforces.com/contest/1065/problem/C] 题意 给你n个高度hi的塔,让你把高的部分切掉,使得最后所有塔一样高,而且每次切的高度之和不大于k ...
- C语言与汇编衔接1
研究实验二 问题研究过程: 发问:C语言中的变量究竟是什么,通过下面的程序进行C语言中的变量的学习 图1 URL.EXE函数 为了研究main函数的首地址,我首先自作聪明的用了一条_DX=main, ...
- Github学习心得体会
https://github.com/Accredit/TEST 在本学期第一次接触Github,在系统的学习了Github的使用之后,自己对Github有了一个基本的使用了解.在这个过程中,自己也认 ...
- 结对项目https://github.com/bxoing1994/test/blob/master/源代码
所选项目名称:文本替换 结对人:曲承玉 github地址 :https://github.com/bxoing1994/test/blob/master/源代码 结对人github地址:ht ...
- 集美大学1414-团队作业2:需求分析&原型设计分数发布
1.评分标准 检查项 分数 编号 调研文档或截图 1 1 软件需求分析说明书 2 2 NABCD 2 3 描述每个成员具体分工 1 4 原型设计 2 5 编码规范 1 6 推广视频 1 7 ...
- 开源通用爬虫框架YayCrawler-页面的抽取规则定义
本节我将向大家介绍一下YayCrawler的核心-页面的抽取规则定义,这也是YayCrawler能够做到通用的主要原因之一.如果我要爬去不同的网站的数据,尽管他们的网站采用的开发技术不同.页面的结构不 ...