【零基礎(chǔ)學(xué)物聯(lián)網(wǎng)】MQTT篇 1-2 MQTT基本原理

為了幫助您學(xué)習(xí),我們專(zhuān)門(mén)為本教程制作了視頻。
↓

在上節(jié)課“MQTT篇 1-1 MQTT是什么”里我們了解了MQTT協(xié)議的背景知識(shí)和基本特點(diǎn),這節(jié)課我們一起了解MQTT的基本工作原理。
在MQTT協(xié)議通訊中,有兩個(gè)最為重要的角色。它們分別是服務(wù)端和客戶(hù)端。首先我們來(lái)初步了解一下它們。
MQTT服務(wù)端
MQTT服務(wù)端通常是一臺(tái)服務(wù)器。它是MQTT信息傳輸?shù)臉屑~,負(fù)責(zé)將MQTT客戶(hù)端發(fā)送來(lái)的信息傳遞給MQTT客戶(hù)端。MQTT服務(wù)端還負(fù)責(zé)管理MQTT客戶(hù)端。確??蛻?hù)端之間的通訊順暢,保證MQTT消息得以正確接收和準(zhǔn)確投遞。
MQTT客戶(hù)端
MQTT客戶(hù)端可以向服務(wù)端發(fā)布信息,也可以從服務(wù)端收取信息。我們把客戶(hù)端發(fā)送信息的行為成為“發(fā)布”信息。而客戶(hù)端要想從服務(wù)端收取信息,則首先要向服務(wù)端“訂閱”信息?!坝嗛啞毙畔⑦@一操作很像我們?cè)谝曨l網(wǎng)站訂閱某一部電視劇。當(dāng)這部電視劇上新后,視頻網(wǎng)站會(huì)向訂閱了該劇的用戶(hù)發(fā)送信息,告訴他們有新劇上線(xiàn)了。
MQTT主題
剛剛我們?cè)谥v解MQTT客戶(hù)端訂閱信息時(shí),使用了用戶(hù)在視頻網(wǎng)站訂閱電視劇這個(gè)例子。在MQTT通訊中,客戶(hù)端所訂閱的肯定不是一部部電視劇,而是一個(gè)個(gè)“主題”。MQTT服務(wù)端在管理MQTT信息通訊時(shí),就是使用“主題”來(lái)控制的。
為了便于您更好理解服務(wù)端是如何通過(guò)主題來(lái)控制客戶(hù)端之間的信息通訊,我們來(lái)看看下圖實(shí)例:

在以上圖示中一共有三個(gè)MQTT客戶(hù)端。它們分別是汽車(chē),手機(jī)和電腦。MQTT服務(wù)端在管理MQTT通訊時(shí)使用了“主題”來(lái)對(duì)信息進(jìn)行管理的。比如上圖所示,假設(shè)我們需要利用手機(jī)和電腦獲取汽車(chē)的速度,那么我們首先要利用電腦和手機(jī)向MQTT服務(wù)器訂閱主題“汽車(chē)速度”。接下來(lái),當(dāng)汽車(chē)客戶(hù)端向服務(wù)端的“汽車(chē)速度”主題發(fā)布信息后,服務(wù)端就會(huì)首先檢查以下都有哪些客戶(hù)端訂閱了“汽車(chē)速度”這一主題的信息。當(dāng)它發(fā)現(xiàn)訂閱了該主題的客戶(hù)端有一個(gè)手機(jī)和一個(gè)電腦,于是服務(wù)端就會(huì)將剛剛收到的“汽車(chē)速度”信息轉(zhuǎn)發(fā)給訂閱了該主題的手機(jī)和電腦客戶(hù)端。
在以上實(shí)例中,汽車(chē)是“汽車(chē)速度”主題的發(fā)布者,而手機(jī)和電腦則是該主題的訂閱者。
值得注意的是,MQTT客戶(hù)端在通訊時(shí),往往角色不是單一的。它既可以作為信息發(fā)布者也可以同時(shí)作為信息訂閱者。如下圖所示:

上圖中的所有客戶(hù)端都是圍繞“空調(diào)溫度”這一主題進(jìn)行通訊的。對(duì)于“空調(diào)溫度”這一主題,手機(jī)和電腦客戶(hù)端成為了MQTT信息的發(fā)布者而汽車(chē)則成為了MQTT信息的訂閱者(接收者)。
可以看到,針對(duì)不同的主題,MQTT客戶(hù)端可以切換自己的角色。它們可能對(duì)主題A來(lái)說(shuō)是信息發(fā)布者,但是對(duì)于主題B就成了信息訂閱者。
MQTT 發(fā)布/訂閱 特性
從以上實(shí)例我們可以看到,MQTT通訊的核心樞紐是MQTT服務(wù)端。有了服務(wù)端對(duì)MQTT信息的接收、儲(chǔ)存、處理和發(fā)送,客戶(hù)端在發(fā)布和訂閱信息時(shí),可以相互獨(dú)立,且在空間上可以分離,時(shí)間上可以異步。這里所說(shuō)的相互獨(dú)立、空間和時(shí)間分離具體指的是什么呢?
相互可獨(dú)立:MQTT客戶(hù)端是一個(gè)個(gè)獨(dú)立的個(gè)體。它們無(wú)需了解彼此的存在,依然可以實(shí)現(xiàn)信息交流。比如以上實(shí)例中汽車(chē)客戶(hù)端在發(fā)布“汽車(chē)速度”信息時(shí),汽車(chē)客戶(hù)端本身可以完全不知道有多少個(gè)MQTT客戶(hù)端訂閱了“汽車(chē)速度”這一主題。而訂閱了“汽車(chē)速度”主題的手機(jī)和電腦客戶(hù)端也完全不知道彼此的存在。大家只要訂閱了“汽車(chē)速度”主題,MQTT服務(wù)端就會(huì)在每次收到新信息時(shí),將信息發(fā)送給訂閱了“汽車(chē)速度”主題的客戶(hù)端。
空間可分離:空間分離相對(duì)容易理解,MQTT客戶(hù)端在通訊比要條件是連接到了同一個(gè)MQTT通訊網(wǎng)絡(luò)。這個(gè)網(wǎng)絡(luò)可以是互聯(lián)網(wǎng)或者局域網(wǎng)。只要客戶(hù)端聯(lián)網(wǎng),無(wú)論他們遠(yuǎn)在天邊還是近在眼前,都可以實(shí)現(xiàn)彼此間的通訊交流。
時(shí)間可異步:MQTT客戶(hù)端在發(fā)送和接收信息時(shí)無(wú)需同步。這一特點(diǎn)對(duì)物聯(lián)網(wǎng)設(shè)備尤為重要。有時(shí)物聯(lián)網(wǎng)設(shè)備會(huì)發(fā)生意外離線(xiàn)的情況。我們使用以上實(shí)例二的場(chǎng)景來(lái)作為示例。當(dāng)我們的汽車(chē)在行駛過(guò)程中,可能會(huì)突然進(jìn)入隧道,這時(shí)汽車(chē)可能會(huì)斷開(kāi)與MQTT服務(wù)端的連接。假設(shè)在此時(shí)我們的手機(jī)客戶(hù)端向汽車(chē)客戶(hù)端所訂閱的“空調(diào)溫度”主題發(fā)布了信息,而汽車(chē)恰恰不在線(xiàn)。這時(shí),MQTT服務(wù)端可以將“空調(diào)溫度”主題的新信息保存,待汽車(chē)再次上線(xiàn)后,服務(wù)端再將“空調(diào)溫度”信息推送給汽車(chē)。
以上幾點(diǎn)概括了MQTT通訊時(shí)客戶(hù)端的相互關(guān)系以及服務(wù)端在其中所起的作用。講到這里請(qǐng)您注意:以上總結(jié)的幾個(gè)特點(diǎn)中都有一個(gè)“可”字。這個(gè)“可”字意味著客戶(hù)端彼此之間可以獨(dú)立,空間可以分離,時(shí)間可以異步。在我們實(shí)際應(yīng)用中,客戶(hù)端之間的關(guān)系既可以獨(dú)立也可以相互依存。在空間上,既可以相距甚遠(yuǎn),也可以彼此相鄰。在時(shí)間上,既可以異步也可以同步。這個(gè)“可”字所體現(xiàn)的是MQTT通訊的靈活性。
可能有些朋友看過(guò)以上文字后感覺(jué)有些抽象。畢竟這些都是純理論知識(shí),在后面的教程里,我們將通過(guò)實(shí)例向您講解MQTT的應(yīng)用,屆時(shí)相信您會(huì)對(duì)MQTT有深切的認(rèn)識(shí)。到這里,請(qǐng)您務(wù)必留意MQTT通訊的三個(gè)特點(diǎn),彼此可獨(dú)立,空間可分離、時(shí)間可異步。

本教程為 太極創(chuàng)客團(tuán)隊(duì) 制作的《零基礎(chǔ)入門(mén)學(xué)用物聯(lián)網(wǎng)》系列教程第二篇- MQTT篇。假如您學(xué)習(xí)本教程感到有些吃力,那么您可能還沒(méi)有觀(guān)看本系列教程 第一篇 - 基礎(chǔ)知識(shí)篇。您可以通過(guò)以下鏈接前往本教程的第一篇 - 基礎(chǔ)知識(shí)篇 教程頁(yè)面。


假如您也喜歡太極創(chuàng)客,希望您將本文“分享”給更多的人,讓更多朋友認(rèn)識(shí)我們。您的每一份點(diǎn)贊與投幣,都是對(duì)我們最溫暖的鼓勵(lì)與支持。
本文編輯制作:CYNO朔 (https://space.bilibili.com/415252426/