干貨!物聯(lián)網(wǎng)開(kāi)發(fā)平臺(tái)協(xié)議,程序員必看!
當(dāng)前物聯(lián)網(wǎng)背景之下,國(guó)內(nèi)出現(xiàn)了許多物聯(lián)網(wǎng)開(kāi)發(fā)平臺(tái),比如百度天工智能物聯(lián)網(wǎng)平臺(tái),阿里L(fēng)ink物聯(lián)網(wǎng)平臺(tái),騰訊QQ物聯(lián)智能硬件開(kāi)放平臺(tái)等等。
這些平臺(tái)應(yīng)用到MQTT協(xié)議,那么MQTT協(xié)議是什么呢?
MQTT,英語(yǔ)全稱(chēng):Message Queuing Telemetry Transport Protocol,即消息隊(duì)列遙感傳輸協(xié)議的縮寫(xiě)。
MQTT是一種基于輕量級(jí)代理發(fā)布/訂閱模式的消息傳輸協(xié)議,運(yùn)行在TCP協(xié)議棧之上。
該協(xié)議提供有序、可靠、雙向連接的網(wǎng)絡(luò)連接保證,特別適合于帶寬低、網(wǎng)絡(luò)延遲高、網(wǎng)絡(luò)通信不穩(wěn)定等受限環(huán)境的消息分發(fā),屬于物聯(lián)網(wǎng)消息傳輸當(dāng)中一個(gè)標(biāo)準(zhǔn)傳輸協(xié)議。
在工作方式上該協(xié)議采用代理發(fā)布/訂閱模式,實(shí)現(xiàn)了發(fā)布和訂閱解耦,因此在該協(xié)議中存在三種角色:
- 代理服務(wù)器;
- 發(fā)布者客戶(hù)端;
- 訂閱者客戶(hù)端。
發(fā)布者和訂閱者互不干擾,也就是說(shuō)發(fā)布者和訂閱者互不知道對(duì)方的存在,它們只知道代理服務(wù)器。
代理服務(wù)器負(fù)責(zé)接收來(lái)自發(fā)布者的消息進(jìn)行存儲(chǔ)同時(shí)將消息再發(fā)送給訂閱者,成為了發(fā)送者和訂閱者之間的中介,同一個(gè)客戶(hù)端可以即是發(fā)布者也可以是訂閱者。
在消息傳遞上是通過(guò)“主題”方式實(shí)現(xiàn):
- “主題”附加在消息上的一個(gè)標(biāo)簽;
- 發(fā)布者客戶(hù)端將“主題”和“消息”發(fā)送至代理服務(wù)器;
- 代理服務(wù)器將該消息轉(zhuǎn)發(fā)至每一個(gè)訂閱了該“主題”的訂閱者客戶(hù)端。
為確保消息能夠完整送達(dá),MQTT協(xié)議提供了三種服務(wù)質(zhì)量等級(jí)。
- 等級(jí)為0,指發(fā)布者消息不要求應(yīng)答回饋,也沒(méi)有重發(fā)機(jī)制,這類(lèi)消息可能會(huì)發(fā)生消息丟失或重復(fù),取決于TCP協(xié)議提供的交互的數(shù)據(jù)包服務(wù)。
- 等級(jí)為1,指最少一次能確保消息送達(dá),但消息重復(fù)可能會(huì)發(fā)生,發(fā)布者如果在指定時(shí)間內(nèi)沒(méi)有收到應(yīng)答控制報(bào)文,發(fā)布者會(huì)重新發(fā)送消息。
- 等級(jí)為2,指僅一次,屬于高級(jí)別的服務(wù)質(zhì)量,消息丟失和重復(fù)都是不可接受,確保僅一次發(fā)送或接收消息。
另外,MQTT協(xié)議利用?;顧C(jī)制在客戶(hù)端設(shè)置LWT信息發(fā)送到代理服務(wù)器。
當(dāng)客戶(hù)端異常斷開(kāi)例如:電量耗盡、系統(tǒng)崩潰或者網(wǎng)絡(luò)斷開(kāi)時(shí),代理服務(wù)器檢測(cè)到客戶(hù)端離線(xiàn)后,就會(huì)發(fā)送保存在特定主題上的 LWT 信息,讓其它訂閱該主題的客戶(hù)端知道該節(jié)點(diǎn)已經(jīng)意外離線(xiàn)。