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