没有合适的资源?快使用搜索试试~ 我知道了~
MQTT 3.1协议中文版
5星 · 超过95%的资源 需积分: 2 114 下载量 179 浏览量
2014-11-27
17:36:53
上传
评论 3
收藏 1.95MB PDF 举报
温馨提示
试读
44页
MQTT 3.1协议中文版,英文版请在我的其他资源里面找。。。。。。。。。中文版!!!!!!。。。。
资源推荐
资源详情
资源评论
1. Abstract/概览(MQTT V3.1)
MQ遥测传输(MQTT)是轻量级的、基于代理的发布/订阅消息传输协议,此协议的设计开放、简单、
轻量、易于实现。这些特点使得此协议非常适用于受限环境。例如,但不仅限于此:
网络代价昂贵,带宽低、不可靠。
在嵌入设备中运行,处理器和内存资源有限。
该协议的特点包括:
使用发布/订阅消息模式,提供一对多的消息分发,解除了应用程序之间的耦合。
对负载内容屏蔽的消息传输。
使用TCP/IP提供基础的网络连接。
有三种消息传递服务质量:
“At most once”“至多一次”,消息发布完全依赖于底层的TCP/IP网络,会发生消息丢失或重复。
这一级别可用于如下情况,如环境传感器数据,这种情况下,丢失一次读记录无所谓,因为第二个
数据的发布紧跟其后。
At lease once“至少一次”,确保消息到达,但可能发生消息重复。
Exactly once“只有一次”,确保消息只到达一次。这一级别可用于如下情况,如计费系统中,消
息重复或丢失会导致不正确的收费问题。
小型传输,开销很小(固定长度的头部是2字节),协议交换最小化,以降低网络流量。
提供一种机制,使得客户端异常中断时,能够使用 LastWill 和 Testament 特性通知有关各方。
2. Message format/消息格式
每个MQTT命令消息的消息头都包含一个固定的报头。有些消息需要一个可变的报头和一个payload。
下面将描述消息头的格式。
2.1. Fixed header/固定报头
每个MQTT命令消息的消息头都包含一个固定的报头。下表显示了固定的报头格式:
Byte 1
包含Message Type(消息类型)和Flags(DUP,QoS级别,RETAIN)字段
Byte 2
(至少一个字节)包含Remaining Length(剩余长度)字段。
这些字段将会在以下各部分说明。所有数据值都是按照bigi-endian顺序:高端字节跟在低端字节之前。
一个16位的字按照如下顺序:最高有效位(MSB)在前,最低有效位(LSB)在后。
2.1.1. Byte 1
2.1.1.1. Message Type 消息类型
位置:byte 1,bits 7-4
表现为一个4-bit的无符号值,这个版本协议的枚举值如下表所示:
0->保留;
1->连接请求:客户端请求连接到服务器;
2->连接确认;
3->发布消息;
4->发布确认;
5->发布信息收到(确保分发的第1部分);
6->发布信息分发(确保分发的第2部分);
7->发布完成 (确保分发的第3部分);
8->客户端订阅请求;
9->订阅确认;
10->客户端取消订阅请求;
11->取消订阅确认;
12->ping请求;
13->ping响应;
14->客户端正在断开连接;
15->保留;
2.1.1.2. FLAGS(DUP、QoS、Retain)
byte1剩余的bits包含如下的字段:DUP,QoS及RETAIN,bit位置如下表所示
DUP
位置:byte 1,bit 3
当client或者server试图重发“PUBLISH”、“PUBREL”、“SUBSCRIBE”或“UNSUBSCRIBE”
消息时,这个flag会被设置。这个flag适用于QoS值大于零(0),且需要确认的消息。当DUP位被设置时,
可变头部包含一个消息ID。
消息接收者应将这个Flag视作为一个提示,那就是这个消息此前可能已经被接收过。但是检测消息是
否重复时不应该依赖此flag。
QoS
位置:byte 1,bits 2-1;
此flag标明了发布消息的交付质量等级。QoS级别如下表所示:
RETAIN
位置:byte 1,bit 0
这个标识只会用于“PUBLISH”消息。当客户端发布一个消息到服务器端时,如果Retain flag被设为
1,则服务器在将消息分发给当前的订阅者后应该保留这条消息(类似state类型的发布)。
当一个新的订阅者订阅某一个主题,如果Retain flag被设置,则此主题最后保留的消息会被发送给此
订阅者。如果没有任何保留的消息,则不会发送。
这对于发布者基于“report by excepion”发布消息时非常有用,这种情况下,两个消息之间可能会
有一定的间隔。这样,新的订阅者会立即接收保留的数据,或者目前为止最好的结果数据。
如果初始PUBLISH到达时,某个订阅者已经存在,那么在服务器给这个订阅者发布一个PUBLISH时,
Retain标识不应该被重置,不管初始PUBLISH的Retain flag是什么。这样,客户端就可以区分正在接收的
消息是保留的消息还是刚刚发布的消息。(类似状态消息支持先订阅后发布,如果是先有订阅者,后有发
布者时,Retain不会被设置,因为此订阅者收到的不是保留消息)
保留的消息在服务器重启后应该继续保留(持久保存保留消息)。
如果服务器收到了一个payload长度为0且Retain flag设置在某一个主题上的消息,则服务器可以删
除此主题的保留消息。( 状态类发布的消息可被删除,收到消息体长度为0,Retain为1的某个主题的消息
时,Server会删除此topic的保留消息)
剩余43页未读,继续阅读
a358763471
- 粉丝: 68
- 资源: 29
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页