MQTT 控制报文类型

名字


报文流动方向

描述

Reserved

0

禁止

保留

CONNECT

1

客户端到服务端

客户端请求连接服务端

CONNACK

2

服务端到客户端

连接报文确认

PUBLISH

3

两个方向都允许

发布消息

PUBACK

4

两个方向都允许

QoS 1 消息发布收到确认

PUBREC

5

两个方向都允许

发布收到(保证交付第一步)

PUBREL

6

两个方向都允许

发布释放(保证交付第二步 )

PUBCOMP

7

两个方向都允许

QoS 2 消息发布完成(保证交互第三步)

SUBSCRIBE

8

客户端到服务端

客户端订阅请求

SUBACK

9

服务端到客户端

订阅请求报文确认

UNSUBSCRIBE

10

客户端到服务端

客户端取消订阅请求

UNSUBACK

11

服务端到客户端

取消订阅报文确认

PINGREQ

12

客户端到服务端

心跳请求

PINGRESP

13

服务端到客户端

心跳响应

DISCONNECT

14

客户端到服务端

客户端断开连接

Reserved

15

禁止

保留

QoS:发布消息的服务质量,即:保证消息传递的次数

Ø00:最多一次,即:<=1

Ø01:至少一次,即:>=1

Ø10:一次,即:=1

Ø11:预留

发布和订阅都可以指定QoS级别,pub中指定的QoS与服务器相关。
例如,当使用qos2时,有必要确保服务器只接收一次,而不是最终的订阅用户。虽然用户在sub中指定了QoS,但是接收到的消息可能不是具有指定QoS级别的消息,而是可能被降级的消息。
响应订阅而发出的消息的有效负载的QoS必须是原始发布消息的QoS和服务器授予的QoS中的最小值。
例如,sub qos2和pub qos0,服务器转发的消息是qos0级别的,这意味着sub可能接收到消息,也可能无法接收到消息。
另一个例子是sub qos0和pub qos2。此时,服务器转发的消息也是qos0级别,sub可能只接收一次消息,也可能不接收。
也就是说,服务器将只根据最低QoS级别pub和sub的QoS规则发送消息。

pub发布时指定的QOS是服务器肯定按此质量接收,但是最终订阅者不一定。
sub订阅时指定的QOS表示订阅者可以接收的最高消息等级,也可能收到更低等级的消息。