MQTT是做什么用的?
MQTT 是一種輕量級(jí)消息傳遞協(xié)議,通常用于物聯(lián)網(wǎng)設(shè)備,這些設(shè)備旨在實(shí)現(xiàn)節(jié)能且消耗最少的帶寬。
MQTT協(xié)議通過TCP/IP運(yùn)行,基于無損通信的雙向發(fā)布-訂閱模型,確保MQTT消息高效無損地傳遞。
MQTT 是一種低開銷協(xié)議,強(qiáng)烈考慮了帶寬和 CPU 限制。它的設(shè)計(jì)能夠在嵌入式環(huán)境中運(yùn)行,從而可靠有效地提供通信途徑。
從根本上說,MQTT是一種發(fā)布/訂閱(pub/sub)協(xié)議。它允許客戶端以發(fā)布者、訂閱者或兩者的身份連接到特定主題。您連接到處理所有消息傳遞的代理,其中每個(gè)客戶端都由唯一的客戶端 ID 標(biāo)識(shí)。
生活中的 MQTT 示例和用例
MQTT通常用于物聯(lián)網(wǎng)應(yīng)用,用于連接傳感器、執(zhí)行器和家用電器等低功耗設(shè)備并與之通信,從而有效管理傳輸數(shù)據(jù)的有效載荷。
在農(nóng)業(yè)中,MQTT 用于監(jiān)測(cè)土壤濕度、溫度和濕度等環(huán)境因素,使農(nóng)民能夠采取適當(dāng)?shù)男袆?dòng)。在工業(yè)自動(dòng)化中,MQTT可以監(jiān)控端到端的制造過程,確保一致的質(zhì)量并識(shí)別生產(chǎn)鏈上的系統(tǒng)性問題。在交通領(lǐng)域,MQTT用于監(jiān)控交通信號(hào)燈、停車計(jì)時(shí)器和公共交通的實(shí)時(shí)位置,同時(shí)注意生態(tài)系統(tǒng)和低帶寬要求。
為什么使用 MQTT 而不是 HTTP?
HTTP 和 MQTT 是兩種截然不同的通信協(xié)議,用于不同的目的。
HTTP 是一種請(qǐng)求/響應(yīng)協(xié)議,它僅在響應(yīng)客戶端請(qǐng)求時(shí)傳遞數(shù)據(jù)。它專為大量數(shù)據(jù)而設(shè)計(jì),通常用于傳輸網(wǎng)頁、圖像和視頻。MQTT 是一種發(fā)布/訂閱協(xié)議,支持異步消息傳遞,多個(gè)客戶端能夠訂閱單個(gè)主題并接收來自一個(gè)或多個(gè)發(fā)布者的消息。MQTT 針對(duì)少量數(shù)據(jù)進(jìn)行了優(yōu)化,但在網(wǎng)絡(luò)開銷和設(shè)備功耗方面比 HTTP 更有效,使其成為需要低帶寬和最低功耗的應(yīng)用程序(例如由 AWS IoT 服務(wù)管理的應(yīng)用程序)的合適選擇。
MQTT是用什么語言編寫的?
MQTT只是一個(gè)協(xié)議,可以用多種語言編寫。但是,用于使用 MQTT 協(xié)議進(jìn)行通信的 MQTT 客戶端庫(kù)支持多種語言,例如 C/C++、Java、Python 和 JavaScript,包括 Node.js、Ruby、Go、PHP 和 Swift。MQTT 客戶端庫(kù)通過 MQTT 代理進(jìn)行通信,該代理也有多種編程語言版本。
MQTT是如何工作的?
MQTT 是一個(gè)非常靈活的協(xié)議,但只有兩個(gè)基本實(shí)體:MQTT 客戶端和 MQTT 代理。
MQTT客戶端如何工作?
MQTT 客戶端可以是實(shí)現(xiàn) MQTT 協(xié)議的任何端點(diǎn)。在物聯(lián)網(wǎng)的情況下,客戶端是連接的設(shè)備,例如傳感器、顯示器或 Arduino 板,但 MQTT 不限于物聯(lián)網(wǎng),例如,客戶端也可以是智能手機(jī)或筆記本電腦。
MQTT 客戶端之間不直接通信。盡管如此,所有交互都是由一個(gè)稱為 MQTT 代理的服務(wù)器組件“代理”的,該組件位于客戶端之間并處理消息的路由。
什么是MQTT分組?
MQTT 中的所有通信都分為“主題”。MQTT 客戶端可以向 Topic 發(fā)布消息,也可以訂閱接收來自他人的消息。主題可以是任何字符串,旨在對(duì)共同感興趣的主題進(jìn)行分組,例如,傳感器更新將發(fā)布到主題,群聊中的消息也是如此,具體取決于用例。
什么是MQTT代理?
代理負(fù)責(zé)管理哪些客戶端訂閱了哪些主題,接收在特定主題上發(fā)布的消息,并將該消息發(fā)送給訂閱更新的任何客戶端。當(dāng)客戶端和代理之間的連接丟失時(shí),代理還負(fù)責(zé)緩存消息,并在重新建立連接時(shí)將其傳遞給客戶端。
可以使用哪些 MQTT 代理?
MQTT 代理是 MQTT 協(xié)議的基礎(chǔ),可以被視為 MQTT 服務(wù)器。如前所述,經(jīng)紀(jì)人位于所有客戶之間并促進(jìn)溝通。
存在許多 MQTT 代理,包括開源和專有的,任何基于 MQTT 的部署中最重要的架構(gòu)決策之一就是如何托管代理。由于 MQTT 被設(shè)計(jì)為以非常大的規(guī)模運(yùn)行,因此任何代理架構(gòu)都需要相應(yīng)地?cái)U(kuò)展。大多數(shù)企業(yè)部署將依賴于云托管的專有產(chǎn)品,因此它們沒有任何基礎(chǔ)設(shè)施問題,盡管也可以使用自托管選項(xiàng)。
在所有通信之間,代理可以保留消息并保留所有會(huì)話的安全記錄;客戶端彼此隔離,因此客戶端的不安全感和漏洞可以被沙盒化,并且根據(jù)您的網(wǎng)絡(luò)拓?fù)?,代理可以減少整個(gè)網(wǎng)絡(luò)上的流量,并允許更高效的路由。
如何使用 MQTT 和 Pub/Sub
任何支持 MQTT 協(xié)議的客戶端都可以訂閱和發(fā)布主題,但所有通信都通過代理進(jìn)行,如下面的示例模型所示。
MQTT協(xié)議特性
雖然MQTT通常被認(rèn)為是物聯(lián)網(wǎng)解決方案,但它只是支撐許多知名物聯(lián)網(wǎng)產(chǎn)品的協(xié)議。MQTT的許多特性使其特別適合設(shè)備之間的高效通信:
易于啟動(dòng)和運(yùn)行
MQTT 已經(jīng)存在了很長(zhǎng)時(shí)間,并且有許多強(qiáng)大、可靠且可擴(kuò)展的專有和開源解決方案。這些預(yù)先存在的 MQTT 組件可用于所有項(xiàng)目,從大型解決方案到激情項(xiàng)目,無需修改,也無論開發(fā)人員經(jīng)驗(yàn)如何。
可靠性和配置
MQTT 具有服務(wù)質(zhì)量 (QoS) 的概念,稍后將詳細(xì)討論,它將消息隊(duì)列并緩存在 MQTT 代理上,并在重新建立連接時(shí)將它們傳送到客戶端。這尤其適用于部分連接的設(shè)備或具有間歇性連接的客戶端,例如 IoT 設(shè)備。
客戶端不必考慮解決方案體系結(jié)構(gòu)
使用 MQTT,可以將消息發(fā)布到主題并在可用時(shí)接收它們。作為客戶,不必?fù)?dān)心建立或重新建立連接,也不必?fù)?dān)心的收件人是否正在監(jiān)聽您的消息,它“只是工作”。
專為規(guī)模而設(shè)計(jì)
MQTT可以應(yīng)對(duì)您的解決方案所需的任何規(guī)模,從初創(chuàng)公司到全球公司。最著名的是,F(xiàn)acebook Messenger使用MQTT進(jìn)行通信。
MQTT 會(huì)話生命周期
MQTT 依賴于 TCP/IP 進(jìn)行連接,因此遵循類似的生命周期
連接
MQTT 客戶端啟動(dòng)與 MQTT 代理的連接。通常,這將通過標(biāo)準(zhǔn) MQTT 端口(分別用于安全和不安全連接的 1883/883)
MQTT 協(xié)議除了底層 TCP/IP 連接的 TLS 之外沒有任何身份驗(yàn)證注意事項(xiàng),這對(duì)于大多數(shù)用例來說已經(jīng)足夠了。
發(fā)布/訂閱
連接后,客戶端可以發(fā)布或訂閱主題以發(fā)送和接收消息。
斷開
斷開連接可以由客戶端或代理發(fā)起,并將導(dǎo)致 MQTT 會(huì)話在處理任何正在進(jìn)行的請(qǐng)求后結(jié)束。
MQTT 服務(wù)質(zhì)量 (QoS)
服務(wù)質(zhì)量允許解決方案設(shè)計(jì)人員指定 MQTT 連接的可靠性,通常,連接越可靠,重試和消息保留的潛在內(nèi)存開銷就越大。
QoS 0
消息僅發(fā)送一次,客戶端和代理不執(zhí)行其他步驟來確認(rèn)傳遞。這也被稱為“即發(fā)即棄”。
這僅適用于客戶端發(fā)送的消息。在代理處收到消息后,它們被視為 QoS 0
QoS 1
發(fā)送方和接收方握手以確保只收到消息的一個(gè)副本。這樣可以確保傳遞并避免發(fā)送消息的多個(gè)副本。
QoS 2
郵件將多次重新發(fā)送,直到收件人確認(rèn)收到郵件。這最適用于時(shí)間敏感的消息,但可能會(huì)導(dǎo)致收到重復(fù)的消息。
MQTT 用例和物聯(lián)網(wǎng)
MQTT是一種輕量級(jí)且節(jié)能的協(xié)議,多年來一直被用于以這些為關(guān)鍵考慮因素的解決方案中。
物聯(lián)網(wǎng)是 MQTT 非常適合的最流行的例子。物聯(lián)網(wǎng)設(shè)備通常由電池供電,維護(hù)成本可能非常高,因此最好在兩次電池更換之間持續(xù)很長(zhǎng)時(shí)間。雖然在家庭環(huán)境中,不時(shí)更換電池并不困難,但在工業(yè)環(huán)境中,有成千上萬的傳感器,分布在廣闊的區(qū)域,而且通常位于非常難以到達(dá)的位置,它們的維護(hù)很快就會(huì)變得昂貴。
MQTT 物聯(lián)網(wǎng)用例包括火災(zāi)探測(cè)器、盜竊跟蹤、位置監(jiān)控、傳感器、發(fā)動(dòng)機(jī)狀態(tài)等。MQTT 還具有非常低的數(shù)據(jù)開銷,因此,在數(shù)據(jù)成本高昂或部署了數(shù)千臺(tái)設(shè)備的環(huán)境中,MQTT 是理想的選擇。
PubNub 和 MQTT 在物聯(lián)網(wǎng)方面可以很好地協(xié)同工作。請(qǐng)參閱我們的 IoT 演示和 IoT 教程,詳細(xì)了解 PubNub 和 MQTT 如何提供可靠、可擴(kuò)展且高效的 IoT 解決方案。
MQTT在實(shí)時(shí)通信中也非常流行,最著名的例子是Facebook Messenger。
為什么Facebook會(huì)選擇使用MQTT?
因?yàn)樗粫?huì)耗盡手機(jī)的電池電量,不會(huì)使用過多的數(shù)據(jù),在安全協(xié)議上運(yùn)行,允許擴(kuò)展,輕松促進(jìn)群聊,并通過中央 MQTT 代理骨干基礎(chǔ)設(shè)施分發(fā)所有數(shù)據(jù)。
審核編輯:黃飛
?
評(píng)論