物联网IOT-mqtt-负载( Payload)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/MyLovelyJay/article/details/87889911

3.1.3 负载

连接包的有效负载包含一个或多个长度前缀字段,其存在由变量头中的标志决定。如果存在这些字段,则必须出现在order Client IdentifierWill TopicWill MessageUser NamePassword中。

3.1.3.1客户标识符(order Client Identifier

        客户端标识符(ClientId)将客户端标识给服务器。连接到服务器的每个客户机都有一个惟一的ClientId。客户机和服务器必须使用ClientId来标识它们持有的与客户机和服务器之间的MQTT会话相关的状态。客户端标识符(ClientId)必须存在,并且必须是连接数据包负载[中的第一个字段。ClientId必须是第1.5.3节[MQTT-3.1.3-4]中定义的UTF-8编码字符串。
服务器必须允许长度在1到23个UTF-8编码字节之间且只包含字符的clientid“0123456789”abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz[MQTT-3.1.3-5]。
服务器可能允许包含超过23个编码字节的ClientId。服务器可能允许ClientId的字符不包含在上面给出的列表中。
服务器可能允许客户端提供长度为零字节的ClientId,但是如果这样做,服务器必须将其视为特殊情况并为该客户端分配唯一的ClientId。然后它必须处理连接包,就像客户机提供了唯一的ClientId [MQTT-3.1.3-6]一样。
如果客户端提供一个0字节的ClientId,客户端还必须将清除设置为1 [MQTT-3.1.3-7]。
如果客户机提供一个0字节的ClientId,并且将CleanSession设置为0,那么服务器必须使用CONNACK返回代码0x02(拒绝标识符)来响应连接包,然后关闭网络连接[MQTT-3.1.3-8]。
如果服务器拒绝ClientId,它必须使用CONNACK返回代码0x02(拒绝的标识符)响应连接包,然后关闭网络连接。

特别注意:

客户机实现可以提供一种方便的方法来生成随机ClientId。当清洁状态设置为0时,应积极劝阻使用这种方法。

3.1.3.2 Will主题(Will Topic

如果将Will标志设置为1,则Will主题是有效负载中的下一个字段。Will主题必须是第1.5.3节[MQTT-3.1.3-10]中定义的UTF-8编码字符串。

3.1.3.3 Will 信息(Will Message

如果将Will标志设置为1,则Will消息是有效负载中的下一个字段。Will消息定义将发布到Will主题的应用程序消息,如3.1.2.5节所述。此字段由两个字节长度和表示为零或多个字节序列的Will消息的有效负载组成。长度给出数据中接下来的字节数,不包括长度本身占用的2个字节。

当将Will消息发布到Will主题时,其有效负载仅由该字段的数据部分组成,而不是前两个长度字节。

3.1.3.4用户名(User Name

如果用户名标志设置为1,则这是负载中的下一个字段。用户名必须是第1.5.3节[MQTT-3.1.3-11]中定义的UTF-8编码字符串。服务器可以使用它进行身份验证和授权。

3.1.3.5 密码(Password

如果密码标志设置为1,则这是有效负载中的下一个字段。Password字段包含0到65535字节的二进制数据,前面加上两个字节长度字段,表示二进制数据使用的字节数(不包括length字段本身占用的两个字节)。

猜你喜欢

转载自blog.csdn.net/MyLovelyJay/article/details/87889911