版權聲明:本文爲博主徐松亮的原創作品,未經允許不得轉載,多謝支持!QQ:5387603
推薦點擊此鏈接:歡迎進入徐松亮博客一站式導航搜索(隨時更新)
MQTT估計不像Tomcat那麼有名,聽過的人恐怕不多,它是主要用於物聯網設備的服務器。由於它(EMQ)的開源、免費、百萬級設備的穩定應用場景,我很看好它。簡單易用,資源有限的客戶端有開源嵌入式代碼(比如ESP8266硬件平臺),還是值得學習瞭解一下的!
目錄
一,MQTT是什麼
-
概述:
- MQTT:Message Queuing Telemetry Transport(消息隊列遙測傳輸)
- 本文主要介紹的是免費、開源的MQTT服務器:EMQTT
- 工作在TCP/IP協議之上
- 輕量級,比web(http)要輕很多。
- 基於發佈/訂閱的消息協議
- 特別適用於資源有限的硬件物聯網設備,以及網絡環境糟糕的場景。
- 本人用它主要是開發基於ESP8266/32的物聯網產品,把MQTT客戶端源碼嵌入到芯片內部,即可實現百萬級的物聯應用。
- 傳輸時對負載內容屏蔽(安全等級較高)。
-
名詞:
- 客戶端(Client):設備,ClientID是每個客戶端的唯一標識,要求全局唯一。
- 連接:等待與服務器建立連接然後創建節點之間的連接。
- 斷開:等待 MQTT 客戶端完成所必須完成的工作,然後等待 TCP/IP 會話關閉連接。
- 主題(Topic):任何消息都屬於一個主題。
- 發佈:發送一個消息。
- 訂閱:設備只接收設備訂閱的主題消息。
- 服務質量等級:
- (QoS 0)至多一次:會發生消息丟失或重複,這一級別可用於如下情況,環境傳感器數據,丟失一次讀記錄無所謂,因爲不久後還會有第二次發送。
- (QoS 1)至少一次:確保消息到達,但消息重複可能會發生。
- (QoS 2)只有一次:確保消息到達一次。這一級別可用於如下情況,在計費系統中,消息重複或丟失會導致不正確的結果。
- cleanSesson
- 0:創建持久對話,客戶端斷開時,會話仍然保持並保存離線信息,直到會話超時註銷,當客戶端再次上線時,還需要處理之前的離線消息,而之前的訂閱關係也會持續生效。
- 1:創建一個新的臨時會話,在客戶端斷開時,會話自動銷燬。
- 爲保證Qos,客戶端和服務器有必要存儲會話狀態。
- 客戶端每次連接時,cleanSesson標誌的值必須固定。
-
關係框圖
二,MQTT服務器的部署
-
下載軟件包:
-
emqtt官網:
-
注意:本實例用的是2.0版本,最新的3.0版本,略有差別,emqtt需要改爲emqx,切界面細節有區別。
-
-
解壓
-
需要解壓到不含中文的路徑,本人把它解壓到D盤根目錄
-
-
指令運行
- 啓動windows的cmd
- 打入如下指令:
- emqttd console
-
驗證(後臺進入管理界面)
- 在瀏覽器中打入如下信息:
- http://127.0.0.1:18083
- 在瀏覽器中打入如下信息:
-
管理界面介紹
三,應用實例
- 本人是用ESP8266產品做得測試,這樣更實際,但考慮到大家未必有相關硬件,所以本例就教大家用本機測試一下
四,常見問題(且聽後續分解)
- Android怎麼部署MQTT服務器?
- Android的經典MQTT客戶端的應用
- 樹莓派能夠部署MQTT服務器嗎?