MQTT協議中的topic


1、MQTT協議中的topic

定閱與發布必須要有主題,只有當定閱了某個主題后,才能收到相應主題的payload,才能進行通信。

2、 主題層級分隔符——“/”

主題層級分隔符使得主題名結構化。如果存在分隔符,它將主題名分割為多個主題層級。

斜杠(‘/’ U+002F)用於分割主題的每個層級,為主題名提供一個分層結構。當客戶端訂閱指定的主題過濾器包含兩種通配符時,主題層級分隔符就很有用了。主題層級分隔符可以出現在主題過濾器或主題名字的任何位置。相鄰的主題層次分隔符表示一個零長度的主題層級。

如主題:

>>1  root/light
>>2  root/tv/contrl/sensor
>>3  root/tv/contrl/light
>>4  root/airconditioning/sensor

3、 多層通配符——“#”

“#”是用於匹配主題中任意層級的通配符。多層通配符表示它的父級和任意數量的子層級。多層通配符必須位於它自己的層級或者跟在主題層級分隔符后面。不管哪種情況,它都必須是主題過濾器的最后一個字符 .

例如,如果客戶端訂閱主題 “china/guangzhou/#”,它會收到使用下列主題名發布的消息:

>>1  china/guangzhou
>>2  china/guangzhou/huangpu
>>3  china/guangzhou/tianhe/zhongshanlu
>>4  china/guangzhou/tianhe/zhongshanlu/num123

定閱主題示例

>>1  school/# //也匹配單獨的 “school” ,因為 # 包括它的父級。
>>2  # //是有效的,會收到所有的應用消息。
>>3  school/teacher/# //有效的。
>>4  school/teacher# //無效的。
>>5  school/teacher/#/lever //無效的,必須是主題過濾器的最后一個字符

4、 單層通配符—-“+”

加號是只能用於單個主題層級匹配的通配符。在主題過濾器的任意層級都可以使用單層通配符,包括第一個和最后一個層級。然而它必須占據過濾器的整個層級 。可以在主題過濾器中的多個層級中使用它,也可以和多層通配符一起使用。

>>1  china/+ 只能匹配 china/guangzhou
>>2  china/+/+/zhongshanlu 能匹配china/guangzhou/tianhe/zhongshanlu和china/shenzhen/nanshan/zhongshanlu

5、 通配符 —-“$”

通配符“$”表示匹配一個字符,只要不是放在主題的最開頭,即:

>>1  $xx
>>2  /$xx
>>3  /xx$

其它情況下都表示匹配一個字符。

如果客戶端想同時接受以 “SYS/”開頭主題的消息和不以“SYS/”開頭主題的消息和不以 開頭主題的消息, 它需要同時訂閱 “#” 和 “$SYS/#”。

6、 總結

  1. 所有的主題名和主題過濾器必須至少包含一個字符
  2. 主題名或主題過濾器以前置或后置斜杠 “/” 區分
  3. 只包含斜杠 “/” 的主題名或主題過濾器是合法的
  4. 主題名和主題過濾器是 UTF-8 編碼字符串, 它們不能超過 65535 字節
  5. 主題名和主題過濾器是區分大小寫的


免責聲明!

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



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