Mqtt 客戶端多主題訂閱


前言: mqtt 的主題一個層級的概念. 我們訂閱多個主題就需要用到這個技術點
功能是在主題中引入層次。層次又分主題層級分隔符,多層通配符和單層通配符
需要注意的一點是: 這些層級不能用在發布消息的 Publish 接口中

  • 層級分類
    • 主題層級分隔符: /
    • 多層通配符: #
    • 單層通配符: +

主題層級分隔符

"/" 被用來分割主題樹的每一層,並給主題空間提供分等級的結構。當兩個通配符在一個主題中出現的時候,主題層次分隔符的使用是很重要的。

// 主題Topic1: 分了三層
/test/child/aaa
// 主題Topic2: 分了四層
/test/child/aaa2/bbb2

多層通配符

多層通配符"#"是一個匹配主題中任意層次數的通配符。我們用案例說明

案例1
訂閱主題: /test/child/#
我們將收到這些主題發送來的消息:

/test/child 
/test/child/aaa
/test/child/ccc
/test/child/aaa/bbb
/test/child/aaa/bbb/ddd

多層通配符可以理解為大於等於0的層次。
多層通配符只可以確定當前層或者下一層

常見錯誤 和正確表示案例

#   // Success, 會接收到不以 / 開頭的所有主題
/#  // Success
/test/#/child   // Error, #必須是最后一個字符
/test/#           // Success
/test/child#    //Error  無效的通配符
/test/child/#   // Success

單層通配符

單層通配符 "+" 只匹配主題的一層

案例1
訂閱主題: /test/child/+
我們將收到這些主題發送來的消息:
注意:接收不到 /test/child 主題發送的消息

/test/child/aaa
/test/child/bbb
/test/child/ccc

常見錯誤 和正確表示案例

+  //Success
/+  // Success
/test/+/child   // Success, 
/test/+           // Success
/test/child+    //Error  無效的通配符
/test/child/+   // Success

主題語法和用法

當你建立一個應用,設計主題樹的時候應該考慮以下的主題名字的語法和語義:

  • 主題至少有一個字符長。
  • 主題名字是大小寫敏感的。比如說,ACCOUNTS和Accounts是兩個不同的主題。
  • 主題名字可以包含空格。比如,Accounts payable是一個有效的主題。
  • 以/開頭會產生一個不同的主題。比如說,/finnace與finance不同。/finance匹配"+/+"和/+,但不匹配+
  • 不要在任何主題中包含null(Unicode \x0000)字符。

以下的原則應用於主題樹的建造和內容

  • 在主題樹中,長度被限制於64k內但是在這以內沒有限制層級的數目 。
  • 可以有任意數目的根節點;也就是說,可以有任意數目的主題樹


免責聲明!

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



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