笔者已经把连接报文,订阅报文,发布报文都讲解了完了。而接下来就是取消订阅报文和断开连接报文。和其他的报文比较的话,他们显示非常简单。甚至笔者觉得可以不必要拿出来讲。只要看一下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——取消订阅报文和断开连接报文的更多相关文章

  1. MQTT——连接报文

    学习MQTT协议.如果只是看了相关文档就认为可以了.那是一个错误的观念.笔者为了能更好的去理解MQTT协议.看了不少相关的开源Broker的项目.可惜这些项目一般都是不完全的.不过从这些项目中笔者至少 ...

  2. MQTT——编写连接报文

    笔者在上一章对连接报文进行了相关的讲解.这一章笔者想写一个连接报文的例子来加深理解.本来这一章也应该在上一章出现的.可是笔者怕太长了.不好方便阅.所以决定分俩章来.正如笔者上一章所讲的.笔者会用Net ...

  3. mqtt已断开连接(32109)

    在rabbitmq下使用mqtt协议时,如果服务质量(qos)设置为2,在发布服务时会出现[已断开连接 (32109) - java.io.EOFException]的报错. 出现该报错的其他情况还有 ...

  4. TCP3次握手连接协议和4次握手断开连接协议

    TCP/IP 状态机,如下图所示: 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接,如图1所示. (SYN包表示标志位syn=1,ACK包表示标志位ack=1,SYN+A ...

  5. TCP建立连接和断开连接图解

    参考博客: http://blog.csdn.net/whuslei/article/details/6667471 http://www.2cto.com/net/201310/251896.htm ...

  6. http请求报文格式和响应报文格式

    转载 出处 超文本传输协议(Hypertext Transfer Protocol,简称HTTP)是应用层协议.HTTP 是一种请求/响应式的协议,即一个客户端与服务器建立连接后,向服务器发送一个请求 ...

  7. MQTT 发布者订阅者

    添加依赖: <dependency> <groupId>org.eclipse.paho</groupId> <artifactId>org.eclip ...

  8. TCP建立连接和断开连接过程

    假设Client端发起中断连接请求,也就是发送FIN报文.Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了",但是如果你还有数据没有发送完成,则不必急着 ...

  9. TCP四次挥手断开连接详解

    TCP四次挥手. 数据传输结束后,通信的双方都可释放连接.现在A和B都处于ESTABLISHED状态.A的应用程序先向TCP发出连接释放报文段,主动关闭TCP连接.A把连接释放报文段的首部FIN置为1 ...

随机推荐

  1. HAProxy 日志输出及配置

    正所谓,没有软件敢说没有bug,人无完人,software is  not perfect software.是软件就可能存在bug,那么如果出现bug,我们就要分析对我们业务的影响及可能如何避免bu ...

  2. Scrum与看板区别

    看板:在制品(work-in-progress, WIP)必须被限制 WIP上限和拉动式生产   1. Scrum与看板简述 Scrum:组织拆分,工作拆分,开发时间拆分,优化发布计划,过程优化 看板 ...

  3. nginx通过https方式反向代理多实例tomcat

    案例说明:前面一层nginx+Keepalived部署的LB,后端两台web服务器部署了多实例的tomcat,通过https方式部署nginx反向代理tomcat请求.配置一如下: 1)LB层的ngi ...

  4. C. Multiplicity

    链接 [http://codeforces.com/contest/1061/problem/C] 题意 给你一个数组,让你找有多少个子串(并非连续,但相对位置不能换),满足bi%i==0; 分析 d ...

  5. C. Make It Equal

    链接 [http://codeforces.com/contest/1065/problem/C] 题意 给你n个高度hi的塔,让你把高的部分切掉,使得最后所有塔一样高,而且每次切的高度之和不大于k ...

  6. C语言与汇编衔接1

    研究实验二 问题研究过程: 发问:C语言中的变量究竟是什么,通过下面的程序进行C语言中的变量的学习 图1  URL.EXE函数 为了研究main函数的首地址,我首先自作聪明的用了一条_DX=main, ...

  7. Github学习心得体会

    https://github.com/Accredit/TEST 在本学期第一次接触Github,在系统的学习了Github的使用之后,自己对Github有了一个基本的使用了解.在这个过程中,自己也认 ...

  8. 结对项目https://github.com/bxoing1994/test/blob/master/源代码

    所选项目名称:文本替换      结对人:曲承玉 github地址 :https://github.com/bxoing1994/test/blob/master/源代码 结对人github地址:ht ...

  9. 集美大学1414-团队作业2:需求分析&原型设计分数发布

    1.评分标准 检查项 分数 编号 调研文档或截图 1 1 软件需求分析说明书 2 2  NABCD 2 3  描述每个成员具体分工 1 4  原型设计 2 5  编码规范 1 6  推广视频 1 7  ...

  10. 开源通用爬虫框架YayCrawler-页面的抽取规则定义

    本节我将向大家介绍一下YayCrawler的核心-页面的抽取规则定义,这也是YayCrawler能够做到通用的主要原因之一.如果我要爬去不同的网站的数据,尽管他们的网站采用的开发技术不同.页面的结构不 ...