MQTT詳解


前言

mqtt現在基本是物聯網標配的數據傳輸協議了,我們今天就詳細說一下mqtt里的那些入門概念

結構

mqtt分兩部分:

  1. 一個是服務端(broker)也可以叫server端,服務端一般使用現成的程序,國內現在比較流行的就是 EMQX ,也有一個用C語言寫的 mosquitto ,生產環境下,服務端一般安裝到雲服務器里。
  2. 另一個是客戶端(client),基本上每個具體的設備都屬於客戶端,比如:攝像頭、冰箱、洗衣機等這些設備,一般程序中還有一個后台管理系統,后台管理系統主要用來存儲、統計設備的數據,它也屬於客戶端。

基本結構

-w430

基礎概念

這里整理一下理解mqtt容易出錯的一些概念

topic (主題設計)

mqtt是使用發布、訂閱 模式進行消息傳遞的,這個和 websocket 有一點類似,基本就是:一個客戶端給 服務端(broker)發送一個消息,broker 按一定規則廣播給其他客戶端。這個規則就是利用 topic 來實現的

注意點:

  1. 每個客戶端都可以在服務端創建一個 topic,topic被創建后, 這個 topic 就可以被所有設備訂閱,包括自己也行,也可以線訂閱topic,再創建,順序上沒有要求
  2. 發布 topic 和訂閱 topic 是兩個接口,所以自己可以訂閱自己發布的 topic
  3. topic 需要一定的設計,不然設備多了的時候設備不好管理
  4. 一個服務端可以發布成千上萬個topic,不用擔心topic過多問題
  5. topic在設計時可以使用這些符號
    1. 主題層級分隔符—“/”
    2. 多層通配符—“#”
    3. 單層通配符—“+”
    4. 通配符 —“$”

客戶端

客戶端在使用時有一些必要的注意點

  1. 客戶端在鏈接服務端時,會有一個用戶名、密碼,這個用戶名和密碼時在服務端配置的,如果有多個平台鏈接服務端,我們就可以創建多個賬號,每個平台使用自己的賬號

  2. 客戶端在鏈接服務端時必須有一個客戶端ID,這個ID在整個服務端都必須時唯一的,服務端就時靠這個id來區分每一個鏈接的。多數情況下這個id是由客戶端帶上去的

  3. 如果想要設備能接收自己離線時別人發給自己的消息,有四點:

    1. 設備的 客戶端ID 唯一且不變,就是說每次連接服務端時都使用同一個ID
    2. 鏈接服務端時設定 【清除會話】為false,就是說不清除 session 會話
    3. 別人發的消息必須時 qos2 權限
    4. 訂閱 topic 也必須時 qos2 權限
  4. 如果想給設備發送一些配置命令,可以使用【保留消息】,保留消息的意思是:這個topic里會一直保留一條最新消息,每次有設備訂閱了這個topic,都會把這條給當前客戶端推送一遍,當前客戶端重新訂閱也會重復收到這個消息

    1. 【保留消息】:qos0、qos1、qos2都會保留
    2. 當前客戶端如果訂閱了兩次同一個topic,則第一次訂閱的topic會在第二個訂閱的時候再收到一次保留的消息
  5. 【保留消息】可以被任意一個設備清除掉,只需要給這個topic發送一個空數據即可

  6. qos的等級在發布和訂閱時都需要指定,pub和sub可以指定不一樣的qos, 服務器只會按pub和sub兩者qos等級最小的那個qos規則來發送消息。

    1. 發送時指定的qos是對服務端的,服務端肯定會按指定qos來接收消息,但是轉發消息時就有可能降級發送
    2. 接收時指定的qos表示訂閱者可以接收的最高消息等級,也就是可能收到更低等級的消息
  7. 監測設備異常時可以使用【遺囑消息】功能

本地測試工具推薦

調試mqtt時需要用到一些客戶端工具,下面是我常用的工具

mqttbox

有瀏覽器插件和客戶端,操作簡單,查看直觀,

缺點:英文客戶端,界面不是很美觀

mqttx

是emqx推出的客戶端,界面比較美觀。有中英文模式,操作還算簡單

缺點:用electorn 開發的,占用空間較大,多開情況下,操作非常不順暢。

建議

建議兩個軟件搭配使用,充當兩個客戶端,其中一個發消息,另一個收消息


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM