MQTT淺析

出於工作需要,最近對MQTT進行了學習,在這裏總結一下。

MQTT是“Message Queuing Telemetry Transport"的英文縮寫,是IBM開發的一個即時通訊協議,是一個輕量級的,基於代理的”發佈/訂閱“模式的消息傳輸協議,截至現在的發佈版本爲V3.1.1,支持多種編程語言,如PHP,JAVA,Python,Node.js,C,C++等,而且特別適合應用於物聯網通信領域,目前國內外也有很多物聯網平臺在部署應用。

什麼是”發佈/訂閱“模式?在MQTT協議中,有發佈者,訂閱者和代理(broker)三種角色,消息由發佈者通過topic發佈,由訂閱者對感興趣的topic進行訂閱,一個發佈者可以對應多個訂閱者,一個訂閱者也可以訂閱多個topic,另外,訂閱者也可以是發佈者,發佈者也可以是訂閱者,這樣就實現了"M2M"(Machine to Machine)的通信。broker類似於郵局或者說信差的角色,它的主要作用就是接收信件並投遞給訂閱信件的人。如果訂閱者不在線,也就是說沒有connected to the broker,那麼消息會保留,等訂閱者在線時投遞,類似於QQ。

MQTT比傳統的通信方式(比如TCP/IP)有什麼優勢?或者說爲什麼選擇MQTT?例如,我們之前項目中經常用socket基於TCP/IP或者UDP進行數據的上傳,爲什麼不直接這樣使用呢?事實上,MQTT就是基於TCP/IP之上建立通信的,其底層的connect機制就是TCP/IP,如果我們對物聯網這種應用場景,採用TCP/IP進行自下而上的開發,需要做大量其它的工作,比如client客戶端,服務器端程序,以及對網絡延遲、即時性以及用戶是否在線的處理,而這些MQTT都已經做了大量的工作和優化,這時採用MQTT,它的優勢就顯現出來了。


MQTT提供了怎樣的安全機制來確保消息傳輸的安全?MQTT在V3.1.1後,其在CONNECT消息裏提供了user和password字段,但值得注意的是,MQTT只提供了這種用戶名和密碼的驗證機制,具體實現需要藉助第三方或另外開發,比如Auth0。此外,用戶名和密碼是明文傳輸的,可以通過TLS或SSL對用戶名和密碼進行加密傳輸。

MQTT的QoS機制以及它們的應用場景?MQTT提供了三種QoS機制,第一種是至多一次傳輸(At most once delivery),這種方式可能會有數據丟包,適用於允許個別數據丟失的場景;第二種是至少一次傳輸(At least once delivery),這種方式可能會有數據包的重複;第三種是精準一次傳輸(Exactly once delivery),這種方式只能傳輸一次並且保證送達,適用於金融支付類不允許丟包和重複的應用場景。

最後,在應用過程中,也總結了下目前比較活躍的基於MQTT的開源項目,如下:

1.Mosquitto---https://mosquitto.org/

2.Mosca---http://www.mosca.io/

歡迎大家掃描下方二維碼關注我的個人微信公衆號,一起交流學習,謝謝。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章