MQTT——遺囑信息
遺愿標(biāo)志(Will Flag)
正常斷開鏈接 :如果客戶端正常斷開連接,會(huì)向服務(wù)器發(fā)送DISCONNECT報(bào)文,服務(wù)端接收到該報(bào)文后,就會(huì)知道,客戶端是正常斷開連接,而并非意外斷開連接。
?
意外斷開連接:通過心跳機(jī)制發(fā)現(xiàn) (客戶端未向服務(wù)器發(fā)送DISCONNECT報(bào)文)。
?
當(dāng)服務(wù)端發(fā)現(xiàn)某一客戶端發(fā)生了意外斷開,服務(wù)端就會(huì)向訂閱了該客戶端遺囑信息的客戶端發(fā)布遺囑信息。
?
遺囑信息內(nèi)容在CONNECT報(bào)文中由四部分組成:
主題lastWillTopic;
Qos等級(jí)lastWillQos;
消息內(nèi)容lastWillMessage;
保留標(biāo)志 lastWillRetain : 設(shè)置為真,客戶端訂閱后馬上就會(huì)收到設(shè)置的遺囑信息;設(shè)置為假的話,發(fā)布遺囑信息的客戶端發(fā)生意外斷開之后,訂閱了該客戶端遺囑信息的客戶端才可收到遺囑消息。?
MQTT遺囑操作
假設(shè)我們現(xiàn)在有一臺(tái)MQTT客戶端A。在使用MQTT遺囑時(shí),它的client id是test-1它的遺囑主題是“test-1-will”。
?
1.?當(dāng)test-1連接服務(wù)端時(shí),CONNECT報(bào)文中的遺囑消息的內(nèi)容是“offline”。并且它的遺囑保留設(shè)置為 false。
?
2.?當(dāng)test-1成功連接服務(wù)端后,立即向遺囑主題“test-1-will”發(fā)布一條消息“online”。同時(shí)在發(fā)布此消息時(shí),如果保留標(biāo)志設(shè)置為true。此時(shí),只要test-1在線,那么任何設(shè)備一訂閱“test-1-will”都能收到設(shè)備在線的消息“online”。
?
3.?如果test-1發(fā)生意外離線,那么任何設(shè)備一訂閱“test-1-will”就會(huì)收到設(shè)備離線的消息“offline”。
