mqtt(message queuing telemetry transport,訊息佇列遙測傳輸協議),是一種基於發布/訂閱(publish/subscribe)模式的"輕量級"通訊協議,該協議構建於tcp/ip協議上,由ibm在2023年發布。mqtt最大優點在於,可以以極少的**和有限的頻寬,為連線遠端裝置提供實時可靠的訊息服務。作為一種低開銷、低頻寬占用的即時通訊協議,使其在物聯網、小型裝置、移動應用等方面有較廣泛的應用。
mqtt是乙個基於客戶端-伺服器的訊息發布/訂閱傳輸協議。mqtt協議是輕量、簡單、開放和易於實現的,這些特點使它適用範圍非常廣泛。在很多情況下,包括受限的環境中,如:機器與機器(m2m)通訊和物聯網(iot)。其在,通過衛星鏈路通訊感測器、偶爾撥號的醫療裝置、智慧型家居、及一些小型化裝置中已廣泛使用。
由於物聯網的環境是非常特別的,所以mqtt遵循以下設計原則:
實現mqtt協議需要客戶端和伺服器端通訊完成,在通訊過程中,mqtt協議中有三種身份:發布者(publish)、**(broker)(伺服器)、訂閱者(subscribe)。其中,訊息的發布者和訂閱者都是客戶端,訊息**是伺服器,訊息發布者可以同時是訂閱者。
mqtt傳輸的訊息分為:主題(topic)和負載(payload)兩部分:
mqtt會構建底層網路傳輸:它將建立客戶端到伺服器的連線,提供兩者之間的乙個有序的、無損的、基於位元組流的雙向傳輸。
當應用資料通過mqtt網路傳送時,mqtt會把與之相關的服務質量(qos)和主題名(topic)相關連。
乙個使用mqtt協議的應用程式或者裝置,它總是建立到伺服器的網路連線。客戶端可以:
mqtt伺服器以稱為"訊息**"(broker),可以是乙個應用程式或一台裝置。它是位於訊息發布者和訂閱者之間,它可以:
一、訂閱(subscription)
訂閱包含主題篩選器(topic filter)和最大服務質量(qos)。訂閱會與乙個會話(session)關聯。乙個會話可以包含多個訂閱。每乙個會話中的每個訂閱都有乙個不同的主題篩選器。
二、會話(session)
每個客戶端與伺服器建立連線後就是乙個會話,客戶端和伺服器之間有狀態互動。會話存在於乙個網路之間,也可能在客戶端和伺服器之間跨越多個連續的網路連線。
三、主題名(topic name)
連線到乙個應用程式訊息的標籤,該標籤與伺服器的訂閱相匹配。伺服器會將訊息傳送給訂閱所匹配標籤的每個客戶端。
四、主題篩選器(topic filter)
乙個對主題名萬用字元篩選器,在訂閱表示式中使用,表示訂閱所匹配到的多個主題。
五、負載(payload)
訊息訂閱者所具體接收的內容。
mqtt協議中定義了一些方法(也被稱為動作),來於表示對確定資源所進行操作。這個資源可以代表預先存在的資料或動態生成資料,這取決於伺服器的實現。通常來說,資源指伺服器上的檔案或輸出。主要方法有:
在mqtt協議中,乙個mqtt資料報由:固定頭(fixed header)、可變頭(variable header)、訊息體(payload)三部分構成。mqtt資料報結構如下:
固定頭存在於所有mqtt資料報中,其結構如下:
5.1.1 mqtt資料報型別
位置:byte 1中bits 7-4。
相於乙個4位的無符號值,型別、取值及描述如下:
5.1.2 標識位
位置:byte 1中bits 3-0。
在不使用標識位的訊息型別中,標識位被作為保留位。如果收到無效的標誌時,接收端必須關閉網路連線:
(1)dup:發布訊息的副本。用來在保證訊息的可靠傳輸,如果設定為1,則在下面的變長中增加messageid,並且需要回覆確認,以保證訊息傳輸完成,但不能用於檢測訊息重**送。
(2)qos:發布訊息的服務質量,即:保證訊息傳遞的次數
ø00:最多一次,即:<=1ø01:至少一次,即:>=1ø10:一次,即:=1ø11:預留(3)retain: 發布保留標識,表示伺服器要保留這次推送的資訊,如果有新的訂閱者出現,就把這訊息推送給它,如果設有那麼推送至當前訂閱者後釋放。 5.1.3 剩餘長度(remaining length)
固定頭的第二位元組用來儲存變長頭部和訊息體的總大小的,但不是直接儲存的。這一位元組是可以擴充套件,其儲存機制,前7位用於儲存長度,後一部用做標識。當最後一位為1時,表示長度不足,需要使用二個位元組繼續儲存。例如:計算出後面的大小為0
mqtt資料報中包含乙個可變頭,它駐位於固定的頭和負載之間。可變頭的內容因資料報型別而不同,較常的應用是作為包的標識:
很多態別資料報中都包括乙個2位元組的資料報標識字段,這些型別的包有:publish (qos > 0)、puback、pubrec、pubrel、pubcomp、subscribe、suback、unsubscribe、unsuback。
payload訊息體位mqtt資料報的第三部分,包含connect、subscribe、suback、unsubscribe四種型別的訊息:
MQTT 入門介紹
mqtt message queuing telemetry transport,訊息佇列遙測傳輸協議 是一種基於發布 訂閱 publish subscribe 模式的 輕量級 通訊協議,該協議構建於tcp ip協議上,由ibm在1999年發布。mqtt最大優點在於,可以以極少的 和有限的頻寬,為連...
lua菜鳥教程 Lua入門學習筆記
最近在使用cocos2d x lua來開發遊戲。遊戲的主要邏輯將在lua裡寫,之前沒有接觸過lua,以下是我總結的入門筆記。運算子邏輯運算子 與 and 或 or 非 not 邏輯判斷只有在false和nil時為假,其餘均為真。or和and會返回第乙個斷路的值。lua中沒有c語言的三元符 x a b...
MQTT 要點 Part 1 MQTT介紹
歡迎來到mqtt 要點的第一部分,關於mqtt協議的核心功能和概念的部落格系列,這篇文章介紹了mqtt 要點系列以及2015年我們將在部落格上介紹的內容,這裡還將介紹mqtt資訊和協議背景。mqtt是一種開放的物聯網協議,國外友人是 很有情懷的,他做這樣系類部落格,希望幫助需要的人,我也是一樣的,一...