在這篇文章中,大家將了解MQTT協議,以及為什么在許多物聯網應用中使用它。
MQTT協議最初由IBM開發,并且是專有的。它的開發是為了解決石油和天然氣行業的傳感器通過衛星與遠程服務器連接的問題,而且是一種經濟有效的方式。然而,它現在是一個由OASIS監督的開放協議。
MQTT是一種與HTTP類似的應用層協議。然而,HTTP和MQTT之間存在顯著差異。其中,在某些物聯網應用中,MQTT優于HTTP。
首先,HTTP是用于客戶端服務器計算的以文檔為中心的請求-響應協議。HTTP是萬維網的基礎,但它不是專門為機器之間通信而設計的。另一方面,MQTT是一種機器對機器、以數據為中心的輕量級協議,旨在用于在資源受限的環境中運行。許多物聯網項目要求設備在各種資源有限下運行,如有限的處理能力、無人值守的網絡操作、高度不可靠的網絡、能源限制等,在這種受限環境中,MQTT比HTTP更受歡迎。與HTTP中的直接客戶端服務器交互不同,MQTT在發布/訂閱范例下運行,中間有MQTT代理。客戶端可以將主題發布到MQTT代理或訂閱主題,同一客戶端可以發布主題X和Y,并訂閱由另一個MQTT客戶端發布的主題Z,MQTT還允許MQTT客戶端和代理之間的持久連接以及不同的服務質量級別,這使得它非常適合各種受限環境,因為在這種情況下,它比HTTP更節能、更快。
現在,來了解一些術語。連接到MQTT代理的所有設備都是MQTT客戶端。MQTT客戶端的范圍從計算機到移動電話,再到小型受限的傳感器設備,MQTT代理是一個MQTT服務器,它在與其連接的不同MQTT客戶端之間傳輸數據。當客戶端希望向代理發送數據時,它會“發布”該數據或主題,當MQTT客戶端希望接收由另一個MQTT客戶端發布的此數據時,它訂閱此主題,然后MQTT代理將此主題傳輸給代理。這與HTTP不同,MQTT客戶端不需要知道彼此的IP地址或端口號,他們所需要做的就是連接到同一個MQTT代理,單個MQTT代理可以處理大量MQTT客戶端,并且每個代理的數量不同。