簡介:後端
MQTT協議(Message Queuing Telemetry Transport)(消息隊列遙測傳輸),是IBM公司於1999年提出的。MQTT是一個基於TCP的發佈訂閱協議,設計的初始目的是爲了極有限的內存設備和網絡帶寬很低的網絡不可靠的通訊,很是適合物聯網通訊。服務器
工做原理:微信
使用 TCP/IP 提供網絡鏈接,提供有序、無損、雙向鏈接;網絡
MQTT 是一種鏈接協議,它指定了如何組織數據字節並經過 TCP/IP 網絡傳輸它們。設備聯網,也須要鏈接到互聯網中,在大萬維的世界中,TCP 如同汽車,有輪子就能用來運輸數據,MQTT 就像是交通規則。在網絡模型中,TCP是傳輸層協議,而 MQTT是在應用層,在 TCP 的上層,所以MQTT 也是基於這個而構建的,提升了可靠性。架構
對負載內容屏蔽的消息傳輸;性能
能夠對消息訂閱者所接受到的內容有所屏蔽。ui
具體有三種消息發佈的服務質量:編碼
至多一次
,消息發佈徹底依賴底層 TCP/IP 網絡。會發生消息丟失或重複。這一級別可用於以下狀況,環境傳感器數據,丟失一次讀記錄無所謂,由於不久後還會有第二次發送。至少一次
,確保消息到達,但消息重複可能會發生。只有一次
,確保消息到達一次。這一級別可用於以下狀況,在計費系統中,消息重複或丟失會致使不正確的結果。小型傳輸,開銷小,固定長度的頭部是 2 字節,協議交換最小化,以下降網絡流量;spa
總體上協議可拆分爲:固定頭部+可變頭部+消息體,這就是爲何在介紹裏說它很是適合"在物聯網領域,傳感器與服務器的通訊,信息的收集"。線程
使用Last Will和Testament特性通知有關各方客戶端異常中斷的機制;
Last Will:即遺言機制,用於通知同一主題下的其餘設備發送遺言的設備已經斷開了鏈接。
Testament:遺囑機制,功能相似於Last Will。
基本概念:
MQTT 客戶端
一個使用 MQTT 協議的設備、應用程序等,它老是創建到服務器的網絡鏈接。
能夠發佈信息,其餘客戶端能夠訂閱該信息
訂閱其它客戶端發佈的消息
退訂或刪除應用程序的消息
斷開與服務器鏈接
MQTT 服務器
MQTT 服務器以稱爲 Broker(消息代理),以是一個應用程序或一臺設備。它是位於消息發佈者 和訂閱者之間
主題(Topic)
鏈接到一個應用程序消息的標籤,該標籤與服務器的訂閱相匹配。服務器會將消息發送給訂閱所匹配標籤的每一個客戶端。
要訂閱的主題。一個主題能夠有多個級別,級別之間用斜槓字符分隔。例如,/world
和 emq/emqtt/emqx
是有效的主題。
訂閱者的Topic name支持通配符#和+ :
客戶端成功訂閱某個主題後,代理會返回一條 SUBACK 消息,其中包含一個或多個 returnCode 參數
主題篩選器(Topic Filter)
一個對主題名通配符篩選器,在訂閱表達式中使用,表示訂閱所匹配到的多個主題。
QoS(消息傳遞的服務質量水平)
服務質量,標誌代表此主題範圍內的消息傳送到客戶端所需的一致程度。
會話(Session)
每一個客戶端與服務器創建鏈接後就是一個會話,客戶端和服務器之間有狀態交互。會話存在於一個網絡之間,也可能在客戶端和服務器之間跨越多個連續的網絡鏈接。
訂閱(Subscription)
訂閱包含主題篩選器(Topic Filter)和最大服務質量(QoS)。訂閱會與一個會話(Session)關聯。一個會話能夠包含多個訂閱。每個會話中的每一個訂閱都有一個不一樣的主題篩選器。
發佈(publish)
控制報文是指從客戶端向服務端或者服務端向客戶端傳輸一個應用消息,MQTT 客戶端發送消息請求,發送完成後返回應用程序線程
負載(Payload)
消息訂閱者所具體接收的內容
MQTT 協議主要是根據如下狀況設計的:
根據 MQTT 的基礎瞭解後並結合簡單的架構,在這裏作一個簡單的示例圖,能夠更直觀的理解MQTT協議的通訊模型。MQTT Broker 就選擇 EMQ 做爲示範。好比有1個溫度傳感器(1個Machine),1個移動設備,1個電腦,一個服務器(3個Machine),均可以獲得或者顯示溫度傳感器的溫度值