前言: 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內但是在這以內沒有限制層級的數目 。
- 可以有任意數目的根節點;也就是說,可以有任意數目的主題樹