3.1 CONNECT —客户端请求连接到服务器
当客户端和服务端建立TCP/IP连接后,需使用CONNECT创建协议层对话。
固定头
DUP, QoS, RETAIN标记在CONNECT 消息未使用
剩余长度包括 可变头(12字节)和负荷数据。
可变头
负荷数据
CONNECT消息的负荷数据包含一个或多个UTF-8字符串,并有可变头的标记决定,字符串的属性如下:
- 客服端标识
UTF-8编码字符串,客户端ID长度1-23字符,用做服务器识别客户端的唯一标识,所有连接同一服务器的客户端的ID必须唯一,这是QoS 1,2等级处理信息的关键。
如果客户端ID长度大于23个字符,服务器对于CONNECT 消息响应CONNACK返回消息码2
- 遗愿话题
WILL 标志置1时存在,UTF-8编码字符串,遗愿消息发布到遗愿话题,
QoS等级由QoS域定义, RETAIN状态有RETAIN标记定义
- 遗愿消息
如果WILL标记置1,UTF-8编码字符串,遗愿消息定义了客户单异常断开连接是发布到遗愿通道的
消息内容。
尽管遗愿消息未UTF-8编码,当其发布到遗愿话题时,只发送一个长度字节而非2个长度字节,因此消息只可包含7bit ASCII字符串。
- 用户名称(Uaser Name)
当用户标记置1,UTF字符串,标识当前连接的用户名称,可用于授权。
建议用户名称少于12个字符。
为兼容V3版,剩余长度域优先于用户名称标识,服务端实现必须可兼容用户名称标记置1但无用户名称字符的情况,次情况应仍可连接
- 密码 (Password)
密码标记1时存在,UTF字符串,对应用户的命名可拥有授权,建议少于12个字节。
考虑兼容V3版本,固定头剩余长度优于密码标记,服务端应可允许密码标记置1但无密码字符的情况。
- 响应
服务端发送CONNACK消息响应客服端的CONNECT消息。
如果服务端在于客户端建立TCP/IP连接后,在合理的时间里没有收到客户端佮连接消息,服务需关闭连接。
如果客户端在一个合理的时间内,未接收到服务端的CONNACK消息,客户端应关闭TCP/ip连接,然后重新打开一个sockect重启对话并且发送CONNECT消息。
合理的时间取决于应用和通信结构。
同一客户端编号的客户端重复连接服务,新的客户端完成连接流程前需断开已有连接。
客户端发送无线连接消息,服务端需关闭连接。
如果服务端可解析CONNECT信息并判断协议非法,也发送包含“CONNECT refused”的响应。
3.2 CONNACK 连接确认
固定头
DUP , QoS, RETAIN标记未用
可变头
负荷
无负荷数据