一、MQTT概述
MQTT(Message Queuing Telemetry Transport,音訊行列遙測傳輸協議),是一種根據發布/訂閱(publish/subscribe)模式的“輕量級”通訊協議,該協議構建于TCP/IP協議上,由IBM在1999年發布。MQTT最大長處在于,能夠以很少的代碼和有限的帶寬,為銜接遠程設備供給實時可靠的音訊效勞。作為一種低開銷、低帶寬占用的即時通訊協議,使其在物聯網、小型設備、移動應用等方面有較廣泛的應用。

MQTT是一個根據客戶端-效勞器的音訊發布/訂閱傳輸協議。MQTT協議是輕量、簡略、敞開和易于實現的,這些特點使它適用范圍非常廣泛。在很多狀況下,包括受限的環境中,如:機器與機器(M2M)通訊和物聯網(IoT)。其在,經過衛星鏈路通訊傳感器、偶然撥號的醫療設備、智能家居、及一些小型化設備中已廣泛運用。
2014年發布的MQTT v3.1.1是當前MQTT協議的最新版本。除標準版外,還有一個簡化版MQTT-SN,該協議首要針對嵌入式設備,這些設備一般作業于TCP/IP網絡,如:ZigBee。
二、MQTT規劃準則
由于物聯網的環境是非常特別的,所以MQTT遵循以下規劃準則:
(1)精簡,不增加可有可無的功用;
(2)發布/訂閱(Pub/Sub)模式,便利音訊在傳感器之間傳遞;
(3)允許用戶動態創立主題,零運維成本;
(4)把傳輸量降到最低以提高傳輸功率;
(5)把低帶寬、高延遲、不穩定的網絡等因素考慮在內;
(6)支撐接連的會話控制;
(7)理解客戶端計算才能或許很低;
(8)供給效勞質量管理; (9)假設數據不可知,不強求傳輸數據的類型與格局,保持靈活性。
三、MQTT特性
MQTT協議作業在低帶寬、不可靠的網絡的遠程傳感器和控制設備通訊而規劃的協議,它具有以下首要的幾項特性:
(1)運用發布/訂閱音訊模式,供給一對多的音訊發布,解除應用程序耦合。
這一點很類似于XMPP,可是MQTT的信息冗余遠小于XMPP,,由于XMPP運用XML格局文原本傳遞數據。
(2)對負載內容屏蔽的音訊傳輸。
(3)運用TCP/IP供給網絡銜接。
主流的MQTT是根據TCP銜接進行數據推送的,可是同樣有根據UDP的版本,叫做MQTT-SN。這兩種版本由于根據不同的銜接辦法,優缺點自然也就各有不同了。
(4)有三種音訊發布效勞質量:
“至多一次”,音訊發布徹底依靠底層TCP/IP網絡。會發作音訊丟掉或重復。這一等級可用于如下狀況,環境傳感器數據,丟掉一次讀記錄無所謂,由于不久后還會有第2次發送。這一種辦法首要普通APP的推送,倘若你的智能設備在音訊推送時未聯網,推送過去沒收到,再次聯網也就收不到了。
“至少一次”,保證音訊到達,但音訊重復或許會發作。
“只要一次”,保證音訊到達一次。在一些要求比較嚴格的計費系統中,能夠運用此等級。在計費系統中,音訊重復或丟掉會導致不正確的成果。這種最高質量的音訊發布效勞還能夠用于即時通訊類的APP的推送,保證用戶收到且只會收到一次。
(5)小型傳輸,開銷很小(固定長度的頭部是2字節),協議交流最小化,以下降網絡流量。
這便是為什么在介紹里說它非常適合“在物聯網領域,傳感器與效勞器的通訊,信息的收集”,要知道嵌入式設備的運算才能和帶寬都相對單薄,運用這種協議來傳遞音訊再適合不過了。
(6)運用Last Will和Testament特性通知有關各方客戶端異常中斷的機制。
Last Will:即遺言機制,用于通知同一主題下的其他設備發送遺言的設備已經斷開了銜接。
Testament:遺言機制,功用類似于Last Will。
四、MQTT協議原理
4.1 MQTT協議實現辦法
實現MQTT協議需求客戶端和效勞器端通訊完成,在通訊過程中,MQTT協議中有三種身份:發布者(Publish)、署理(Broker)(效勞器)、訂閱者(Subscribe)。其中,音訊的發布者和訂閱者都是客戶端,音訊署理是效勞器,音訊發布者能夠同時是訂閱者。
MQTT傳輸的音訊分為:主題(Topic)和負載(payload)兩部分:
(1)Topic,能夠理解為音訊的類型,訂閱者訂閱(Subscribe)后,就會收到該主題的音訊內容(payload);
(2)payload,能夠理解為音訊的內容,是指訂閱者具體要運用的內容。
4.2 網絡傳輸與應用音訊
MQTT會構建底層網絡傳輸:它將樹立客戶端到效勞器的銜接,供給兩者之間的一個有序的、無損的、根據字節省的雙向傳輸。
當應用數據經過MQTT網絡發送時,MQTT會把與之相關的效勞質量(QoS)和主落款(Topic)相干系。
4.3MQTT客戶端
一個運用MQTT協議的應用程序或許設備,它總是樹立到效勞器的網絡銜接。客戶端能夠:
(1)發布其他客戶端或許會訂閱的信息;
(2)訂閱其它客戶端發布的音訊;
(3)退訂或刪除應用程序的音訊;
(4)斷開與效勞器銜接。
4.4 MQTT效勞器
MQTT效勞器以稱為“音訊署理”(Broker),可所以一個應用程序或一臺設備。它是坐落音訊發布者和訂閱者之間,它能夠:
(1)接受來自客戶的網絡銜接;
(2)接受客戶發布的應用信息;
(3)處理來自客戶端的訂閱和退訂請求; (4)向訂閱的客戶轉發應用程序音訊。
4.5 MQTT協議中的訂閱、主題、會話
(1)訂閱(Subscription)
訂閱包括主題挑選器(Topic Filter)和最大效勞質量(QoS)。訂閱會與一個會話(Session)相關。一個會話能夠包括多個訂閱。每一個會話中的每個訂閱都有一個不同的主題挑選器。
(2)會話(Session)
每個客戶端與效勞器樹立銜接后便是一個會話,客戶端和效勞器之間有狀況交互。會話存在于一個網絡之間,也或許在客戶端和效勞器之間跨過多個接連的網絡銜接。
(3)主落款(Topic Name)
銜接到一個應用程序音訊的標簽,該標簽與效勞器的訂閱相匹配。效勞器會將音訊發送給訂閱所匹配標簽的每個客戶端。
(4)主題挑選器(Topic Filter)
一個對主落款通配符挑選器,在訂閱表達式中運用,表明訂閱所匹配到的多個主題。
(5)負載(Payload) 音訊訂閱者所具體接收的內容。
4.6 MQTT協議中的辦法
MQTT協議中界說了一些辦法(也被稱為動作),來于表明對確定資源所進行操作。這個資源能夠代表預先存在的數據或動態生成數據,這取決于效勞器的實現。通常來說,資源指效勞器上的文件或輸出。首要辦法有:
1)Connect。等待與效勞器樹立銜接。
2)Disconnect。等待MQTT客戶端完成所做的作業,并與效勞器斷開TCP/IP會話。
3)Subscribe。等待完成訂閱。
4)UnSubscribe。等待效勞器撤銷客戶端的一個或多個topics訂閱。
5)Publish。MQTT客戶端發送音訊請求,發送完成后返回應用程序線程。
http://www.alotcer.com/index.php?c=article&id=1583
|