MQTT(0) 基本介紹

嗨!又好長一段時間沒寫文了(其實根本就沒寫幾篇)

前陣子 Boss 要我準備一堂 IoT 相關的課程,並且要教大家怎麼架設 MQTT Broker。
也就是說…學弟妹在老闆課堂上看到的簡報或是程式範例,可能是我做的~
為了造福學弟妹日後的作業…

什麼是 MQTT ?

MQTT 為 Message Queuing Telemetry Transport 的縮寫,它是一個基於發布/訂閱架構的傳輸協定(ISO/IEC 20922),並且具有輕量雙向以及高擴展性的特性,因此廣泛的應用在物聯網之中。

MQTT 的運作模式

在 MQTT 當中分為 MQTT broker 以及 MQTT client 兩個角色。MQTT Broker 通常不會主動傳輸訊息,而是作為訊息代理,有點像是小時候的傳直條,請旁邊的同學幫忙傳給心儀的對象,而這位同學的角色就像是 MQTT Broker,負責發訊息與收訊息的就是 MQTT client 啦!

大家都來找同一個 Broker 傳訊息,要怎麼知道哪一張紙條要傳到哪裡呢?這就要提到 MQTT 的主題(topic)。MQTT client 可以向 Broker 訂閱特定主題,當 Broker 收到訊息時,會根據主題,將訊息派發給有訂閱的 MQTT Client。


MQTT 的主題(Topic)

MQTT 的主題使用 ufw-8 編碼,並以斜線字元區分節層。基本上都沒有什麼太大的限制,最大的限制就是必須在 65,535 bits 之內。
舉個例子:

  • my-house/living-room/temperature
  • school/room-106/switch

MQTT 也有一些比較特殊的字元,像是:

  • +: 作為單層的通用字元,用來表示該層級所有主題。
    舉例來說:A/B/+
    可以匹配下列主題
    - A/B/C
    - A/B/Y
    但是與下列主題不相符
    - A/C/D
    - A/B/C/D

  • #: 為多層的通用字元,表示該層級以下的所有主題。
    舉例來說:A/B/#
    可以匹配下列主題
    - A/B/C
    - A/B/Y
    - A/B/C/D
    但是與下列主題不相符
    - A/C/D

  • $: 通常為系統控制的字元。主要用於獲取 MQTT Broker 的運作狀態、連線資訊或是運行紀錄等資料。

參考資料: