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