3.1 CONNECT —客户端请求连接到服务器

当客户端和服务端建立TCP/IP连接后,需使用CONNECT创建协议层对话。

固定头

3 MQTT 3.1 command messages - 图1

DUP, QoS, RETAIN标记在CONNECT 消息未使用

剩余长度包括 可变头(12字节)和负荷数据。

可变头

3 MQTT 3.1 command messages - 图2

3 MQTT 3.1 command messages - 图3

负荷数据

CONNECT消息的负荷数据包含一个或多个UTF-8字符串,并有可变头的标记决定,字符串的属性如下:

  1. 客服端标识

UTF-8编码字符串,客户端ID长度1-23字符,用做服务器识别客户端的唯一标识,所有连接同一服务器的客户端的ID必须唯一,这是QoS 1,2等级处理信息的关键。

如果客户端ID长度大于23个字符,服务器对于CONNECT 消息响应CONNACK返回消息码2

  1. 遗愿话题

WILL 标志置1时存在,UTF-8编码字符串,遗愿消息发布到遗愿话题,

QoS等级由QoS域定义, RETAIN状态有RETAIN标记定义

  1. 遗愿消息

如果WILL标记置1,UTF-8编码字符串,遗愿消息定义了客户单异常断开连接是发布到遗愿通道的

消息内容。

尽管遗愿消息未UTF-8编码,当其发布到遗愿话题时,只发送一个长度字节而非2个长度字节,因此消息只可包含7bit ASCII字符串。

  1. 用户名称(Uaser Name)

当用户标记置1,UTF字符串,标识当前连接的用户名称,可用于授权。

建议用户名称少于12个字符。

为兼容V3版,剩余长度域优先于用户名称标识,服务端实现必须可兼容用户名称标记置1但无用户名称字符的情况,次情况应仍可连接

  1. 密码 (Password)

密码标记1时存在,UTF字符串,对应用户的命名可拥有授权,建议少于12个字节。

考虑兼容V3版本,固定头剩余长度优于密码标记,服务端应可允许密码标记置1但无密码字符的情况。

  1. 响应

服务端发送CONNACK消息响应客服端的CONNECT消息。

如果服务端在于客户端建立TCP/IP连接后,在合理的时间里没有收到客户端佮连接消息,服务需关闭连接。

如果客户端在一个合理的时间内,未接收到服务端的CONNACK消息,客户端应关闭TCP/ip连接,然后重新打开一个sockect重启对话并且发送CONNECT消息。

合理的时间取决于应用和通信结构。

同一客户端编号的客户端重复连接服务,新的客户端完成连接流程前需断开已有连接。

客户端发送无线连接消息,服务端需关闭连接。

如果服务端可解析CONNECT信息并判断协议非法,也发送包含“CONNECT refused”的响应。

3.2 CONNACK 连接确认

固定头

3 MQTT 3.1 command messages - 图4

DUP , QoS, RETAIN标记未用

可变头

3 MQTT 3.1 command messages - 图5

3 MQTT 3.1 command messages - 图6

负荷

无负荷数据