MQTT主題使用

一、topic

定閱與發佈必需要有主題,只有當定閱了某個主題後,才能收到相應主題的payload,才能進行通訊。bash

二、 主題層級分隔符—-「/」

主題層級分隔符使得主題名結構化。若是存在分隔符,它將主題名分割爲多個主題層級。編碼

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

如主題:spa

  >>1  root/lightcode

  >>2  root/tv/contrl/sensorxml

  >>3  root/tv/contrl/light字符串

  >>4  root/airconditioning/sensorit

三、 多層通配符—-「#」

「#」是用於匹配主題中任意層級的通配符。多層通配符表示它的父級和任意數量的子層級。多層通配符必須位於它本身的層級或者跟在主題層級分隔符後面。無論哪一種狀況,它都必須是主題過濾器的最後一個字符 .io

例如,若是客戶端訂閱主題 「china/guangzhou/#」,它會收到使用下列主題名發佈的消息:class

  >>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 //無效的,必須是主題過濾器的最後一個字符

四、 單層通配符—-「+」

加號是隻能用於單個主題層級匹配的通配符。在主題過濾器的任意層級均可以使用單層通配符,包括第一個和最後一個層級。然而它必須佔據過濾器的整個層級 。能夠在主題過濾器中的多個層級中使用它,也能夠和多層通配符一塊兒使用。

  >>1  china/+ 只能匹配 china/guangzhou

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

五、 通配符 —-「$」

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

  >>1  $xx

  >>2  /$xx

  >>3  /xx$

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

若是客戶端想同時接受以 「SYS/SYS/」開頭主題的消息和不以 開頭主題的消息, 它須要同時訂閱 「#」 和 「「$SYS/#」。

六、 總結

  1. 全部的主題名和主題過濾器必須至少包含一個字符
  2. 主題名或主題過濾器之前置或後置斜槓 「/」 區分
  3. 只包含斜槓 「/」 的主題名或主題過濾器是合法的
  4. 主題名和主題過濾器是 UTF-8 編碼字符串, 它們不能超過 65535 字節
  5. 主題名和主題過濾器是區分大小寫的
相關文章
相關標籤/搜索