“臨終遺囑”信息
該協(xié)議提供了檢測(cè)方式,利用KeepAlive機(jī)制在客戶端異常斷開(kāi)時(shí)發(fā)現(xiàn)問(wèn)題。因此當(dāng)客戶端電量耗盡、崩潰或者網(wǎng)絡(luò)斷開(kāi)時(shí),消息代理會(huì)采取相應(yīng)措施。
客戶端會(huì)向任意點(diǎn)的消息代理發(fā)送“臨終遺囑”(LWT)信息,當(dāng)消息代理檢測(cè)到客戶端離線(連接并未關(guān)閉),就會(huì)發(fā)送保存在特定主題上的 LWT 信息,讓其它客戶端知道該節(jié)點(diǎn)已經(jīng)意外離線。
安全性
MQTT(及通常的物聯(lián)網(wǎng)設(shè)備)的安全性是一個(gè)相當(dāng)大的主題,之后我們會(huì)詳加描述,不過(guò)在本文中僅涉及兩個(gè)主要的安全性功能:身份驗(yàn)證與加密。
身份驗(yàn)證是通過(guò)在 MQTT 連接包中發(fā)送用戶名與密碼來(lái)實(shí)現(xiàn),幾乎所有消息代理與客戶端在實(shí)現(xiàn)時(shí)都支持這一功能。但由于信息太容易被攔截,為了避免,應(yīng)當(dāng)盡可能地使用安全傳輸層協(xié)議(TLS)。
協(xié)議本身未提供加密功能,但由于 MQTT 是在 TCP 上層運(yùn)行的,我們可以很容易地利用 TLS 來(lái)提供加密連接。但這確實(shí)增加了發(fā)送與接收信息的計(jì)算復(fù)雜性,不但在約束系統(tǒng)中會(huì)造成問(wèn)題,還會(huì)影響消息代理的性能。稍后我們會(huì)就這個(gè)問(wèn)題進(jìn)行更多討論。
消息代理軟件
有許多不同方式實(shí)現(xiàn)的可用消息代理,最常見(jiàn)的系統(tǒng)包括:
Mosquitto —— 這是最早在生產(chǎn)環(huán)境中可用的消息代理之一,以 C 語(yǔ)言編寫,提供多種配置與高性能。
Mosca —— 以 Node.js 編寫,可嵌入 Node 應(yīng)用或以獨(dú)立可執(zhí)行文件的形式運(yùn)行。由于配置簡(jiǎn)單并具有可擴(kuò)展性,它也是我們最喜歡的消息代理,具有高性能的優(yōu)點(diǎn)。
RSMB —— IBM 對(duì) MQTT 協(xié)議的實(shí)現(xiàn),也是最不常用的選項(xiàng)之一,不過(guò)它是一個(gè)用C語(yǔ)言編寫的成熟系統(tǒng)。
HiveMQ —— HiveMQ 是一種相對(duì)較新的消息代理,面向企業(yè)環(huán)境,在博客上有很多關(guān)于 MQTT 不錯(cuò)的信息。
客戶端庫(kù)
幾乎包含了所有流行語(yǔ)言的客戶端庫(kù),想要具體了解的話,Paho 項(xiàng)目會(huì)是你的最佳選擇。這個(gè)項(xiàng)目隸屬于 Eclipse,旨在提供各種語(yǔ)言盡可能多樣化的 MQTT 客戶端實(shí)現(xiàn)參考。這是個(gè)很好的資源,包含以C、Java、Python、Javascript等語(yǔ)言編寫的可用客戶端。
結(jié)論
MQTT 是一個(gè)理想的協(xié)議,它在物聯(lián)網(wǎng)與 M2M 通信中的應(yīng)用是無(wú)限的。如果你需要輕量級(jí)的消息傳輸系統(tǒng),那么它會(huì)是很好的選擇,而且在未來(lái)幾年中很可能會(huì)流行起來(lái)。希望本文能幫助讀者對(duì) MQTT 做以了解。