MQTTv3.1中文版
MQTT V3.1中文版 消息类型 位置:byte1,bits74 无符号4位值,这个版本的枚举值如下表所示: Mnemonic Enumeration Description Reserved Reserved CONNECT Client request to connect to server CONNACK Connect Acknowledgment PUBLISH Publish message PUBACK Publish Acknowledgment PUBREC Publish Received(assured delivery part 1) PUBREL Publish Release(assured delivery part 2) PUBCOMP 0123456789 Publish Complete(assured delivery part 3) SUBSCRIBE Client Subscribe request SUBACK Subscribe Acknowledgment UNSUBSCRIBE 10 Client Unsubscribe request UNSUBACK 11 Unsubscribe Acknowledgment PINGREQ 12 PING Request PINGRESP 13 PING Response DISCONNECT 14 Client is Disconnecting Reserved 15 Reserved (0->保留;1->客户端请求连接到服务器;2->连接确认;3->发布消息;4>发布确认;5->发布收稿 (有保证的交付第1部分);6->岀版发行(有保讧交付第2部分);7->发布完整(有保证的交付第3部 分);8->客户端订阅请求;9->订阅砳认;10->客户端退订请求;11->退订确认;12->ping请求;13 >ping相应;14>客户端端口;15->保留;) FLAGS 剩下的三位分别为DUP,Q0S及 RETAIN字段,bit位置如卜表所示 MQTT V3.1中文版 Bit position Name Description 3 DUP Duplicate delivery 2-1 Qos Quality of Service 0 RETAIN RETAIN flag DUP 位置:byte1,bit4 这个标识是一个集合,当 client或者 serye企图重 发" PUBLISH"、" PUBREL"、" SUBSCRIBE"、" UNSUBSCRIBE"消息时,这适用于信息的QoS值大于零 (0),并且消息确认是必需的。当设置的DUP位,可变头部包含一个消息ID 接收者应视作为一个提示消息以此标识判断此消息以前是不收到。它不应该依赖于检测重复 Qos 位置:byte1,bis2-1; 此标识指示发送消息的交付质量等级。QoS级别如下表所示 Qos value bit 2 bit 1 Description oooAt most once Fire and Forget =1 011 0 Exactly once Assured delivery =1 Reserved RETAIN 位置:bye1,bit0 这ˆ标识只用于" PUBLISH消息。当客户端发送一个 PUBLISH消息到服务器,如果保留标识位置(1), 当消息发送给当前用户服务器应该保留这条消息。 当一个新的订阅者订阅某一个主题,最后保留的某主题消息应被发送到用户并带着" RETAIN"标识位置。 如果没有保留消息,则不发送。 MQTT V3.1中文版 这对于发布者发错消息时非鸴有用,它允许一个新的订阅者立即接收到最重要的数据。 当服务器发送给客户端一个 PUBLISH,发现原始的 PUBLISH已经存在时, Retail标识不应该被重置,忽珞 掉原始PUB凵ISH的 Retain标识。也就是说,允许客户端区分那些凵经被接收的消息,止在接收的消息,以 及即时接收的消息。 保留的消息应该在服务器重启启动后也应该保留下来。 服务器可以删除某个已保留的消息,如果接收的消息长度为0或者保留标识为设置同一个主题 Remaining Length 位置:byte2 表示当前的消息剩余的字节数,包括活数据在可变头和有效载荷。 可变长度编码方案采用了单字节的消息,多大127个字节长。较长的消息处理方式如下,每个字节7位编 码剩余长度的数据,和第八位表示在下面还有值。每个字节编128个值和一个"延续位”。例如,数字64 十进制编码为一个字节的十进制64,十六进制0×40的 321十进制(=65+2*128)编码为两个字节的重要的最初性最低。 第一个字节65+128=193.需要注意的是最肓位表明至少有下列其屮一个字节。第二个字节是2。 协议限制最多四个字节表示,这允许应用程序发送消息到268435455(256M)。 这个数字表示:值为0XFF,0XFF,0xFF,OX7F 下表显示了增加字节数所代表的剩余长度值 Digits From To 10(0x00) 127(0X7F) 2|128(0x80,0x01) 16383(0XFF,0x7 316384(0×80,0X80,0×01) 2097151(0XFF,0XFF,0X7F) 4|2097152(0x80,0×80,0X80,0x01)268435455(0XF,0XFF,0xFF,0x7F 该算法编码成可变长度编码的十进制数(X方案如下) // if there are more digits to encode, set the top bit of this digit if(>0 endif tput.d MoD是模运算符(%inC),Div是整数除法(/inC),OR是逐位或(inC)υ剩余长度字段解码算 法如下 MQTT V3.1中文版 multiplier vale= do digit =''next digit from stream value + (digit AND -27)* mu-tiplier multiplier x= _28 hile ((digit AND 128)!=0) AND是操作符(&inC) 这种算法终止时,vaue包含以字节为单位的剩余长度 剩余长度编码是不可变头的一部分。字节数用于编码的剩余长度,不利于剩余长度值。可变长度的护展 字节”是固定的头,而不是可变头的一部分。 22 variab| e header/可变的报头 (MQTT V3. 1) MQT命令消息的某些类型还包括一 variable header组件。它位于 fixed header和 payload之间 Remaining length字段的可变长度不是 variable header的一部分。 Remaining Length字段的字节不是 Remaining length值的字节计数。它的值只考底 variable header和 playload。更多信息查看Fed header c Variable header的格式在卜面的章节描述,它们必须顺序出现在 header里。 协议名称 这个协议名称代表可变头的一个 MQTT CONNECT消息。该字段是UTF8编码的字符串,代表协议名称 MQlsdp,大写显示 协议版本 协以版本代表可变头的 CONNECT消息。 该字段是一个8位无符号值,抽述由客服端所使用的协议的修订基本,当前版本的协议为3(0×03),如 下表所小。 bit 7 6 5 4 3210 Protocol Version 0 0 00011 MQTT V3.1中文版 Connect flags(连接标志) The clean session, ill, Will Qos和 Retain flags在可变头的 CONNECT消息里是存在的。 Clean session flag Position:bit1 of the Connect flags bytes(连接标志字节的第1位) 如果不设置(0),那么服务器必须存储客户端的订阅后断开。这包括继续存储汀阅消息QoS1和QoS2消 息,以便当客户端重新连接时它们能传递。服务器还必须保持在连接丢失 delivered in- flight消息的状态。 此信息必须保持,直到客户端重新连接。 如果设置(1),那么服务器必须放弃任何以前客户端维扩的信息和让连接保持"αlean"。当客户端断开连 接时,服务器还必须丢充一切状态。 通常情况下,一个客户端将在一个模式下或者其他情况下操作,并且不会改变。该选择将取决于 application。一个 clean的会话的客户端将不会接收到过时的信息,每次连接时它必须重新订阋。一个 non- clean会话的客户端不会错过任何QoS1或者QoS2的信息,当它失去连接时会被发布。当它们被发布 出去吋QoS0不会被存储。 这个标志以前被称为~ lean start",它已经被重命名,它适用于整个会话,不仅仅是初始连接 当这个客户端永远不会重新迕接时,一个服务器可以为客户端提供一种清除存储信息的管理机制。 bit 7 6 5 4|3 2 1 0 User Name Password WIII Will Will Clean Flag Flag Retain Qos lag Session Reserved X X X 在当前版本的协议屮这个字节的0位不使用。它是为将欢使用保留。 Will flag Position:bit2 of the Connect flags byte(迕接标志字节的第2位) Will message定义」当服务器与客户端通信遇到I/O错误或客户端没有在一定时闾计划内保持连接时,会 发布一个 message。服务器从客户端接收到 DISCONNECT消息时,并不会触发服务器发送一条WlI message 如果设置Wfag,WQoS和 Will Retain字段必须存在于 Connect flags字节中, Will Topic和 Will message 字段必须在 payload里。 Will flag的格式如下表所示 MQTT V3.1中文版 bit 7 6 5 43 2 1 0 User Name Password Will Will Clean Flag Flag Retain Qo sx Flag Session Reserved X X X X 在当前版本的协议中这个字节的0位不使用。它是为将来使用保留。 Will Qos Position:bits4and3 of the Connect flags byte.(连接标志字节的第4位和3位。) 当一个连接中的客户端被偶然的断开时为一个 Will message定义在 Will Qos宁段中的Q0S级别。Wl‖l message被定义在 CONNECT message的 payload中。( A connecting client specifies the qos level in the Will Qos field for a Will message that is sent in the event that the client is disconnected involuntarily The Will message is defined in the payload of a CoNNEct message. 如果设置 Will flag,wl!QoS字段是强制性的,则他的将被忽略 V!QoS的值是0(0×00),1(0×01),or2(0×02)。VIII ill QOs标志显示在下面的表格中 bit 7 6 5 4|3 2 1 0 User Name Password Clean Flag Flag Retain Qos Flag Session Reserved X X 在当前版本的协议中这个字节的0位不使用。它是为将来使用保留的 Will Retain flag Position:bit5 of the connect flags byte(连接标忐字节的第5位) 当客户端意外的断开连接时, Will retain标志说明服务器是否应该保留被服务器发布的 Will message. 如果设置WviiiIII Retain标志,Wviii ill Retain标志是强制生的,否则它将被忽略。硎‖ Retain标志的格式如下表 所 bit 7 6 5 43 2 1 0 User Name Password Will Will Clean Flag Flag Retain Qos Flag Session Reserved xx 1 X 在当前版本的协议中这个字节的0位不适用。它是为将来使用保留。 MQTT V3.1中文版 User name and password flags(用户名和密码标志) Position:bits6and7 of the Connect flags byte.(连接标志字节的第6位和第7位) 个连接中的客户端可以指定一个用户名和密码,设置标志位表示一个用户和密码(可选),包含在 个 CONNECT message的 payload里 如果设置 User name标志, User name字段是强制性的,否则 User name的值是无效的,如果设置 Password标志, Password字段是强制性的,否灲 Password的值是无效的。如果没有设置 User Name,而 提供 Password是无效的。 bit 7 6 5 43 2 User Name Password Will Will Clean Reserved Flag Flag Retain Qos Flag Session X 在当前版本的协议中这个字节的0位不使用,它是为将来使用保留。 Keep Alive timer Keep Alive timer目前在一个 MQTT CONNECT message的可变头中。 Keep Alive timer,以秒为单位,定义从客户端收到的消息的最大时间间隔。它使服务器可以检测客户端 的网络连接是否已经断开,而不需要等待 long TCP/ IP timeout。客户端在每个 Keep Alive time的间隔内发 送一个消息给服务器。在缺乏相关数据消息时,客户端会发送一个 PINGREQ消息给服务器,该服务器得 到ping请求后悔发送一个 PINGRESP消息。 如果在 Keep alive15倍时间间隔内,服务器没有从客户端收到消息,这是客户端如发送了 DISCONNECT消息,则断开客户端。此操作不会影响任仼何客户端的订阅。请参阅有关详细信息 DISCONNECT 发送了一个 PINGREQ后,如在一个 Keep Alive时间内,客户端没有收到一个 PINGRESP消息,就会关闭掉 TCP/IP端口连接 Ke° o Alive timer是一个16位的数值,表示段吋间的秒数。实际值是特定」应用程序的,但一个典型的 值是几分钟。最大值是大约18小时。值为零(0)是指客户端没有断开。 The format of the Keep alive timer is shown in the table below. the ordering of the 2 bytes of the Keep Alive Timer is MSB, then LSB(big-endian) bit 7 6 3 2 1 0 Keep Alive MSB Keep Alive LSB MQTT V3.1中文版 Connect return code(连接返回码) 连接返回码被设置在一个变量头的 CONNACK消息中。 该字段定义∫一个无符号位的返凹码。下的表格显示的是只体的消息类型的值。返回0通常表示成 功 Enumeration HEX Meaning 0x00 Connection Accepted 012345 0x01 Connection Refused: unacceptable protocol version 0x02 Connection Refused: identifier rejected 0x03 Connection Refused: server unavailable 0x04 Connection Refused: bad user name or password 0x05 Connection Refused: not authorized 6-255 Reserved for future use bit 6 5 3 2 1 0 Return Code Topic name(主题名称) 主题名称是在变量头的一个 MQTT PUBLISH消息 主题名称是关键,标忐 payload数据被发布的信息管道。订阅者接收发布的信息通过信息管道。 主题名称是UTF8编码的字符串。参见上节MQT和UTF8更多信息。主题名称有一个较长的字符长度 (32,767字符)。 2.3 Payload (MQTT v3. 1) 以下几和类型的MQT命令消息有一个 payload(有效载荷) connECT: Payload包含一个或多个UTF8编码的字符串。它们为客户端指定了一个唯一的标识符, Will Topic, message和 User name和密码使用。但是第一个是可选的,它们的存在是基于尔量头的标志。
下载地址
用户评论