MQTT v3.1.1 協議只有 10 種返回碼,這些返回碼所能表示的含義不多,且相同的返回碼的值在不一樣的報文中能夠有不一樣的含義。git
在 CONNECT 報文中只有 6 種返回碼,只有當服務器發回的 CONNACK 報文的返回碼爲 0時才表示鏈接創建成功。github
值 | 返回碼 | 描述 |
---|---|---|
0 | 0x00 接受鏈接 | 接受鏈接 |
1 | 0x01 拒絕鏈接,不支持的協議版本 | 服務器不支持該客戶端請求的 MQTT 協議 |
2 | 0x02 拒絕鏈接, 拒絕的客戶端 ID | 客戶端 ID 是正確的 UTF-8 字符串,可是不被服務器容許 |
3 | 0x03 拒絕鏈接,服務器不可用 | 網絡鏈接已經創建,可是 MQTT 服務不可用 |
4 | 0x04 拒絕鏈接,損壞的用戶名或密碼 | 在用戶名或密碼中的數據是錯誤格式的 |
5 | 0x05 拒絕鏈接,未受權 | 客戶端的鏈接未被受權 |
6-255 | 預留給未來使用 |
在 SUBACK 報文中只有 4 種返回碼服務器
值 | 返回碼 | 描述 |
---|---|---|
0 | 0x00 成功 | 最大容許 QoS 0 的消息 |
1 | 0x01 成功 | 最大容許 QoS 1 的消息 |
2 | 0x02 成功 | 最大容許 QoS 2 的消息 |
128 | 0x80 失敗 | 失敗 |
SUBACK 報文有四種返回碼,除了返回碼 0x80 表示失敗,其餘返回碼都表示訂閱成功, 3 個值 0, 1, 2 分別表明訂閱接收到的消息的最大 QoS 值。網絡
MQTT v5.0 協議將返回碼更名成了緣由碼,增長了用於表示更多類型的錯誤的緣由碼。spa
下表是緣由碼列表,分別表示的是緣由碼的值以及包含緣由碼的控制報文:orm
十進制 | 十六進制 | 名稱 | 報文 |
---|---|---|---|
0 | 0x00 | 成功 (Success) | CONNACK, PUBACK, PUBREC, PUBREL, PUBCOMP, UNSUBACK, AUTH |
0 | 0x00 | 准許 QoS 0 (Granted QoS 0) | SUBACK |
1 | 0x01 | 准許 QoS 1 (Granted QoS 1) | SUBACK |
2 | 0x02 | 准許 QoS 2 (Granted QoS 2) | SUBACK |
4 | 0x04 | 以遺囑消息斷開鏈接 (Disconnect with Will Message) | DISCONNECT |
16 | 0x10 | 沒有匹配的訂閱者 (No matching subscribers) | PUBACK, PUBREC |
17 | 0x11 | 沒有訂閱 (No subscription existed) | UNSUBACK |
24 | 0x18 | 繼續認證 (Continue authentication) | AUTH |
25 | 0x19 | 從新認證 (Re-authenticate) | AUTH |
128 | 0x80 | 未指定錯誤 (Unspecified error) | CONNACK, PUBACK, PUBREC, SUBACK, UNSUBACK, DISCONNECT |
129 | 0x81 | 畸形報文 (Malformed Packet) | CONNACK, DISCONNECT |
130 | 0x82 | 協議錯誤 (Protocol Error) | CONNACK, DISCONNECT |
131 | 0x83 | 實現特有錯誤 (Implementation specific error) | CONNACK, PUBACK, PUBREC, SUBACK, UNSUBACK, DISCONNECT |
132 | 0x84 | 不支持的協議版本 (Unsupported Protocol Version) | CONNACK |
133 | 0x85 | 客戶端標識符無效 (Client Identifier not valid) | CONNACK |
134 | 0x86 | 錯誤的用戶名和密碼 (Bad User Name or Password) | CONNACK |
135 | 0x87 | 未受權 (Not authorized) | CONNACK, PUBACK, PUBREC, SUBACK, UNSUBACK, DISCONNECT |
136 | 0x88 | 服務器不可用 (Server unavailable) | CONNACK |
137 | 0x89 | 服務器繁忙 (Server busy) | CONNACK, DISCONNECT |
138 | 0x8A | 禁止訪問 (Banned) | CONNACK |
139 | 0x8B | 服務器關機中 (Server shutting down) | DISCONNECT |
140 | 0x8C | 錯誤驗證方法 (Bad authentication method) | CONNACK, DISCONNECT |
141 | 0x8D | 保活超時 (Keep Alive timeout) | DISCONNECT |
142 | 0x8E | 會話被接管 (Session taken over) | DISCONNECT |
143 | 0x8F | 主題過濾器無效 (Topic Filter invalid) | SUBACK, UNSUBACK, DISCONNECT |
144 | 0x90 | 主題名無效 (Topic Name invalid) | CONNACK, PUBACK, PUBREC, DISCONNECT |
145 | 0x91 | 報文標識符在使用中 (Packet Identifier in use) | PUBACK, PUBREC, SUBACK, UNSUBACK |
146 | 0x92 | 沒有發現報文標識符 (Packet Identifier not found) | PUBREL, PUBCOMP |
147 | 0x93 | 超出接收最大值 (Receive Maximum exceeded) | DISCONNECT |
148 | 0x94 | 主題別名無效 (Topic Alias invalid) | DISCONNECT |
149 | 0x95 | 報文太大 (Packet too large) | CONNACK, DISCONNECT |
150 | 0x96 | 消息傳輸速率過高 (Message rate too high) | DISCONNECT |
151 | 0x97 | 超出限額 (Quota exceeded) | CONNACK, PUBACK, PUBREC, SUBACK, DISCONNECT |
152 | 0x98 | 管理行爲 (Administrative action) | DISCONNECT |
153 | 0x99 | 有效載荷格式無效 (Payload format invalid) | PUBACK, PUBREC, DISCONNECT |
154 | 0x9A | 不支持消息保留 (Retain not supported) | CONNACK, DISCONNECT |
155 | 0x9B | 不支持的QoS (QoS not supported) | CONNACK, DISCONNECT |
156 | 0x9C | 使用另外一臺服務器 (Use another server) | CONNACK, DISCONNECT |
157 | 0x9D | 服務器被移除 (Server moved) | CONNACK, DISCONNECT |
158 | 0x9E | 不支持的共享訂閱 (Shared Subscription not supported) | SUBACK, DISCONNECT |
159 | 0x9F | 超出鏈接速率 (Connection rate exceeded) | CONNACK, DISCONNECT |
160 | 0xA0 | 最大鏈接時間 (Maximum connect time) | DISCONNECT |
161 | 0xA1 | 不支持的訂閱標識符 (Subscription Identifiers not supported) | SUBACK, DISCONNECT |
162 | 0xA2 | 不支持的通配符訂閱 (Wildcard Subscription not supported) | SUBACK, DISCONNECT |
緣由碼是用來代表操做結果的一個單字節無符號值,小於 0x80 的緣由碼代表操做的結果是成功的,正常狀況下,操做成功返回的緣由碼值爲 0。 若是返回的緣由碼大於等於 0x80,就說明操做失敗了。server
CONNACK, PUBACK, PUBREC, PUBREL, PUBCOMP, DISCONNECT 和 AUTH 控制報文的緣由碼存在可變報頭中。而 SUBACK 和 UNSUBACK 報文在有效載荷中包含了一張緣由碼的列表。圖片
更多信息請訪問咱們的官網 emqx.io,或關注咱們的開源項目 github.com/emqx/emqx ,詳細文檔請訪問 官方文檔。ip