MQTT 5.0 新特性(二)— 緣由碼與否定應答

MQTT v3.1.1

MQTT v3.1.1 協議只有 10 種返回碼,這些返回碼所能表示的含義不多,且相同的返回碼的值在不一樣的報文中能夠有不一樣的含義。git

CONNACK 報文

在 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 報文

在 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

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

圖片描述

相關文章
相關標籤/搜索