物聯網開發之MQTT協議?

物聯網開發技術多種多樣,開發形式也不可勝數,今天我們就開分享當下非常流行的物聯網通信協議MQTT,但凡現在的雲服務商的物聯網設備接入服務都是支持MQTT方式接入的,比如阿里雲、京東雲、騰訊雲等巨頭雲服務商都有提供物聯網設備管理服務,也都是支持MQTT方式接入、管理物聯網設備的。

物聯網開發之MQTT協議?

什麼是MQTT?

MQTT(消息隊列遙測傳輸)是ISO 標準(ISO/IEC PRF 20922)下基於發佈/訂閱範式的消息協議。它工作在 TCP/IP協議族上,是為硬件性能低下的遠程設備以及網絡狀況糟糕的情況下而設計的發佈/訂閱型消息協議,為此,它需要一個消息中間件 。

MQTT是一個基於客戶端-服務器的消息發佈/訂閱傳輸協議。MQTT協議是輕量、簡單、開放和易於實現的,這些特點使它適用範圍非常廣泛。在很多情況下,包括受限的環境中,如:機器與機器(M2M)通信和物聯網(IoT)。其在,通過衛星鏈路通信傳感器、偶爾撥號的醫療設備、智能家居、及一些小型化設備中已廣泛使用。


未來幾年,MQTT的應用會越來越廣,值得關注。作為物聯網開發的我們當然也要對這種協議進行了解和使用。

物聯網開發之MQTT協議?

MQTT有哪些特點?

MQTT協議是為大量計算能力有限,且工作在低帶寬、不可靠的網絡的遠程傳感器和控制設備通訊而設計的協議,它具有以下主要的幾項特性:

1、使用發佈/訂閱消息模式,提供一對多的消息發佈,解除應用程序耦合;

2、對負載內容屏蔽的消息傳輸;

3、使用 TCP/IP 提供網絡連接;

4、有三種消息發佈服務質量:

“至多一次”,消息發佈完全依賴底層 TCP/IP 網絡。會發生消息丟失或重複。這一級別可用於如下情況,環境傳感器數據,丟失一次讀記錄無所謂,因為不久後還會有第二次發送。

“至少一次”,確保消息到達,但消息重複可能會發生。

“只有一次”,確保消息到達一次。這一級別可用於如下情況,在計費系統中,消息重複或丟失會導致不正確的結果。

5、小型傳輸,開銷很小(固定長度的頭部是 2 字節),協議交換最小化,以降低網絡流量;

6、使用 Last Will 和 Testament 特性通知有關各方客戶端異常中斷的機制。

物聯網開發之MQTT協議?

MQTT協議消息中間件產品?

目前有很多的MQTT消息中間件服務器,如下,都是MQTT協議的服務器端的實現。

IBM Websphere

MQ Telemetry

IBM MessageSight

Mosquitto

Eclipse Paho

emqttd Xively

m2m.io

webMethods

Nirvana Messaging

RabbitMQ

Apache ActiveMQ

Apache Apollo

Moquette

HiveMQ

Mosca

Litmus Automation Loop

JoramMQ

ThingMQ

VerneMQ


MQTT協議實現方式


實現MQTT協議需要客戶端和服務器端通訊完成,在通訊過程中,MQTT協議中有三種身份:發佈者(Publish)、代理(Broker)(服務器)、訂閱者(Subscribe)。其中,消息的發佈者和訂閱者都是客戶端,消息代理是服務器,消息發佈者可以同時是訂閱者。

物聯網開發之MQTT協議?

MQTT傳輸的消息分為:主題(Topic)和負載(payload)兩部分:


(1)Topic,可以理解為消息的類型,訂閱者訂閱(Subscribe)後,就會收到該主題的消息內容(payload);

(2)payload,可以理解為消息的內容,是指訂閱者具體要使用的內容


MQTT協議中的訂閱、主題、會話

物聯網開發之MQTT協議?


a、訂閱(Subscription)

訂閱包含主題篩選器(Topic Filter)和最大服務質量(QoS)。訂閱會與一個會話(Session)關聯。一個會話可以包含多個訂閱。每一個會話中的每個訂閱都有一個不同的主題篩選器。


b、會話(Session)

每個客戶端與服務器建立連接後就是一個會話,客戶端和服務器之間有狀態交互。會話存在於一個網絡之間,也可能在客戶端和服務器之間跨越多個連續的網絡連接。


c、主題名(Topic Name)

連接到一個應用程序消息的標籤,該標籤與服務器的訂閱相匹配。服務器會將消息發送給訂閱所匹配標籤的每個客戶端。


d、主題篩選器(Topic Filter)

一個對主題名通配符篩選器,在訂閱表達式中使用,表示訂閱所匹配到的多個主題。


e、負載(Payload)

消息訂閱者所具體接收的內容。



MQTT協議中的方法

物聯網開發之MQTT協議?


MQTT協議中定義了一些方法(也被稱為動作),來於表示對確定資源所進行操作。這個資源可以代表預先存在的數據或動態生成數據,這取決於服務器的實現。通常來說,資源指服務器上的文件或輸出。主要方法有:

(1)Connect。等待與服務器建立連接。

(2)Disconnect。等待MQTT客戶端完成所做的工作,並與服務器斷開TCP/IP會話。

(3)Subscribe。等待完成訂閱。

(4)UnSubscribe。等待服務器取消客戶端的一個或多個topics訂閱。

(5)Publish。MQTT客戶端發送消息請求,發送完成後返回應用程序線程。


分享到:


相關文章: