1. 會(huì)話(huà)(session)
- 會(huì)話(huà)是服務(wù)端和客戶(hù)端的一個(gè)連接,進(jìn)行消息交互前必須先建立會(huì)話(huà)庐扫,一個(gè)會(huì)話(huà)的狀態(tài)不會(huì)被下一個(gè)會(huì)話(huà)使用炼杖。
2. 會(huì)話(huà)的生命周期
- 會(huì)話(huà)建立后泳桦,網(wǎng)絡(luò)異常斷開(kāi)時(shí)并不會(huì)終止會(huì)話(huà)蜗字,只有客戶(hù)端主動(dòng)終止才會(huì)結(jié)束一個(gè)會(huì)話(huà)打肝。
- 會(huì)話(huà)的生命周期由CONNECT報(bào)文里的Clean Session標(biāo)志位和控制。
- 當(dāng)會(huì)話(huà)不存在時(shí)挪捕,忽略Clean Session標(biāo)志位闯睹,直接建立新會(huì)話(huà)。
- 當(dāng)會(huì)話(huà)存在時(shí)担神,Clean Session = 1,放棄當(dāng)前會(huì)話(huà)的狀態(tài)始花,建立新會(huì)話(huà)妄讯。
- 當(dāng)會(huì)話(huà)存在時(shí)孩锡,Clean Session = 0,繼續(xù)維持當(dāng)前會(huì)話(huà)亥贸。
當(dāng)客戶(hù)端希望主動(dòng)終止會(huì)話(huà)時(shí)躬窜,可以先設(shè)置Clean Session = 1重新CONNECT,然后立即DISCONNECT斷開(kāi)連接炕置。
注:MQTT v5.0荣挨,服務(wù)端開(kāi)始支持為會(huì)話(huà)設(shè)置過(guò)期時(shí)間,當(dāng)網(wǎng)絡(luò)斷開(kāi)后達(dá)到過(guò)期時(shí)間服務(wù)端可以立即終止會(huì)話(huà)朴摊。
3. 會(huì)話(huà)的標(biāo)識(shí)
3.1 什么是Client ID
Client ID是用來(lái)識(shí)別不同會(huì)話(huà)的唯一標(biāo)識(shí)默垄。認(rèn)證時(shí)使用的用戶(hù)名(User Name)和密碼(Password)則是完全獨(dú)立的。兩個(gè)會(huì)話(huà)可以使用相同的用戶(hù)名甚纲,也可以使用不同的用戶(hù)名口锭。
注:如果兩個(gè)會(huì)話(huà)使用相同的Client ID,那么后一個(gè)會(huì)話(huà)CONNECT時(shí)會(huì)導(dǎo)致前一個(gè)會(huì)話(huà)的網(wǎng)絡(luò)連接斷開(kāi)介杆。
Client ID可以設(shè)為空鹃操,表明本次會(huì)話(huà)是匿名的臨時(shí)訪問(wèn),網(wǎng)絡(luò)斷開(kāi)時(shí)會(huì)話(huà)立即結(jié)束春哨。匿名訪問(wèn)只允許Clean Session = 1荆隘。
3.2 Client ID格式
- Client ID必須是符合規(guī)范的UTF-8編碼的字符串。
- 服務(wù)端必須能夠支持長(zhǎng)度為[1, 23]的UTF-8編碼的Client ID赴背,而且只包含字符0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ椰拒。
- 服務(wù)端也可以支持大于23個(gè)字節(jié)編碼的Client ID。服務(wù)端也可以允許Client ID包含上述字符之外的字符癞尚。
4. 會(huì)話(huà)狀態(tài)
4.1 客戶(hù)端的會(huì)話(huà)狀態(tài)
- 已發(fā)送給服務(wù)端耸三,但是還沒(méi)有完成確認(rèn)的QoS1和QoS2的消息。
- 從服務(wù)端收到的浇揩,但是還沒(méi)有完成確認(rèn)的QoS2消息仪壮。
4.2 服務(wù)端的會(huì)話(huà)狀態(tài)
- 會(huì)話(huà)是否存在,即使會(huì)話(huà)狀態(tài)其余部分為空胳徽。
- 客戶(hù)端訂閱信息积锅,包括任何訂閱標(biāo)識(shí)符。
- 已發(fā)送給客戶(hù)端养盗,但是還沒(méi)有完成確認(rèn)的QoS1和QoS2的消息缚陷。
- 等待傳輸給客戶(hù)端的QoS0(可選),QoS1和QoS2的消息往核。
- 從客戶(hù)端收到的箫爷,但是還沒(méi)有完成確認(rèn)的QoS2消息。遺囑消息和遺囑延時(shí)間隔(MQTT v5.0)。
注:保留消息不是會(huì)話(huà)狀態(tài)的一部分虎锚,會(huì)話(huà)結(jié)束時(shí)不被刪除硫痰。