一、MQTT協定介紹:
MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸協定),是一種基于釋出/訂閱(publish/subscribe)模式的"輕量級"通訊協定,該協定建構于TCP/IP協定上,由IBM在1999年釋出。MQTT最大優點在于,可以以極少的代碼和有限的帶寬,為連接配接遠端裝置提供實時可靠的消息服務。作為一種低開銷、低帶寬占用的即時通訊協定,使其在物聯網、小型裝置、移動應用等方面有較廣泛的應用。
1.1MQTT模型架構
MQTT(消息隊列遙測傳輸)是ISO 标準(ISO/IEC PRF 20922)下基于釋出/訂閱範式的消息協定。它工作在 TCP/IP協定族上,是為硬體性能低下的遠端裝置以及網絡狀況糟糕的情況下而設計的釋出/訂閱型消息協定,為此,它需要一個消息中間件 。
1.2MQTT協定特點
1、使用釋出/訂閱消息模式,提供一對多的消息釋出,解除應用程式耦合;
2、對負載内容屏蔽的消息傳輸;
3、使用 TCP/IP 提供網絡連接配接;
4、有三種消息釋出服務品質:
"至多一次",消息釋出完全依賴底層TCP/IP網絡。會發生消息丢失或重複。這一級别可用于如下情況,環境傳感器資料,丢失一次讀記錄無所謂,因為不久後還會有第二次發送。這一種方式主要普通APP的推送,倘若你的智能裝置在消息推送時未聯網,推送過去沒收到,再次聯網也就收不到了。
"至少一次",確定消息到達,但消息重複可能會發生。
"隻有一次",確定消息到達一次。在一些要求比較嚴格的計費系統中,可以使用此級别。在計費系統中,消息重複或丢失會導緻不正确的結果。這種最高品質的消息釋出服務還可以用于即時通訊類的APP的推送,確定使用者收到且隻會收到一次。
5、小型傳輸,開銷很小(固定長度的頭部是 2 位元組),協定交換最小化,以降低網絡流量;
6、使用 Last Will 和 Testament 特性通知有關各方用戶端異常中斷的機制。
二、MQTT協定原理
2.1協定實作方式
實作MQTT協定需要用戶端和伺服器端通訊完成,在通訊過程中,MQTT協定中有三種身份:釋出者(Publish)、代理(Broker)(伺服器)、訂閱者(Subscribe)。其中,消息的釋出者和訂閱者都是用戶端,消息代理是伺服器,消息釋出者可以同時是訂閱者。
MQTT傳輸的消息分為:主題(Topic)和負載(payload)兩部分:
- (1)Topic,可以了解為消息的類型,訂閱者訂閱(Subscribe)後,就會收到該主題的消息内容(payload);
- (2)payload,可以了解為消息的内容,是指訂閱者具體要使用的内容。
2.2MQTT用戶端
一個使用MQTT協定的應用程式或者裝置,它總是建立到伺服器的網絡連接配接。用戶端可以:
- (1)釋出其他用戶端可能會訂閱的資訊;
- (2)訂閱其它用戶端釋出的消息;
- (3)退訂或删除應用程式的消息;
- (4)斷開與伺服器連接配接。
2.3MQTT服務端
MQTT伺服器以稱為"消息代理"(Broker),可以是一個應用程式或一台裝置。它是位于消息釋出者和訂閱者之間,它可以:
- (1)接受來自客戶的網絡連接配接;
- (2)接受客戶釋出的應用資訊;
- (3)處理來自用戶端的訂閱和退訂請求;
- (4)向訂閱的客戶轉發應用程式消息。
三、mosquitto庫使用
1.mosquitto庫安裝
添加存儲庫
sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
安裝
sudo apt-get install mosquitto-clients -y
安裝指令行用戶端
sudo apt-get install mosquitto-clients -y
2.使用mosquitto庫測試
這裡我們需要開三個終端,一個相當于broker,輸入後會阻塞,千萬别關閉。具體參數可參考mosquitto--help。
mosquitto -v
第二個終端,訂閱端:
mosquitto_sub -t test
第三個終端,釋出端:
mosquitto_pub -t test -m "123"
看到此時已經可以進行收發通信