MQTT一次訂閱多個主題

2021-09-30 19:03:18 字數 1454 閱讀 6793

利用mqtt一次訂閱多個主題

在做智慧型家居相關的應用時候,需要利用訂閱所有裝置的主題。這個時候我們需要利用mqtt的萬用字元的功能,乙個訂閱可能包含特殊字元,允許你一次定義多個主題。主題層次分隔符被用來在主題中引入層次。多層的萬用字元和單層萬用字元可以被使用,但他們不能被使用來做發布者的訊息。

1.主題層級分隔符/

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

2.多層萬用字元#

#是乙個匹配主題中任意層次數的萬用字元。比如說,如果你訂閱了finance/stock/ibm/#,你就可以接收到以下這些主題的訊息。

finance/stock/ibm

finance/stock/ibm/closingprice

finance/stock/ibm/currentprice

多層萬用字元有可以表示大於等於0的層次。因此,finance/#也可以匹配到單獨的finance,在這種情況下#代表0層。在這種語境下主題層次分隔符/就沒有意義了。因為沒有可以分的層次。

多層萬用字元只可以確定當前層或者下一層。因此,#和finance/#都是有效的,但是finance#不是有效的。多層萬用字元一定要是主題樹的最後乙個字元。比如說,finance/#是有效的,但是finance/#/closingprice是無效的。

3.單層萬用字元+

+只匹配主題的一層。比如說,finance/stock/+匹配finance/stock/ibm和finance/stock/xyz,但是不匹配finance/stock/ibm/closingprice。另外,因為單層萬用字元只匹配1層,finance/+不匹配finance。

單層萬用字元可以被用於主題樹的任意層級,連帶多層萬用字元。它必須被用在主題層級分隔符/的右邊,除非它是指定自己。因此,+和finance/+都是有效的,但是finance+無效。單層萬用字元可以用在主題樹的末端,也可以用在中間。比如說,finance/+和finance/+/ibm都是有效的。

4.主題語法和用法

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

主題至少有乙個字元長。

主題名字是大小寫敏感的。比如說,accounts和accounts是兩個不同的主題。

主題名字可以包含空格。比如,accounts payable是乙個有效的主題。

以/開頭會產生乙個不同的主題。比如說,/finnace與finance不同。/finance匹配"+/+"和/+,但不匹配+

不要在任何主題中包含null(unicode \x0000)字元。

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

在主題樹中,長度被限制於64k內但是在這以內沒有限制層級的數目 。

可以有任意數目的根節點;也就是說,可以有任意數目的主題樹。

原文: 

利用MQTT一次訂閱多個主題

在做智慧型家居相關的應用時候,需要利用訂閱所有裝置的主題。這個時候我們需要利用mqtt的萬用字元的功能,乙個訂閱可能包含特殊字元,允許你一次定義多個主題。主題層次分隔符被用來在主題中引入層次。多層的萬用字元和單層萬用字元可以被使用,但他們不能被使用來做發布者的訊息。被用來分割主題樹的每一層,並給主題...

發布訂閱自己的一次理解

前面都是先訂閱好事件,等事件可以觸發後再執行觸發。類似預售,先登記要買,等貨備好了再賣給你。能不能反過來?先發布,再訂閱?聽起來,如果先發布了卻找不到訂閱者,就像乙個發出的訊號,如果沒人回應,最終會消失掉。所以開發的思路裡,就要想方法儲存這個發出的訊號,等有人訂閱的時候,那個人就把這個訊號拿出來。c...

一次新增多個帳戶

關於一次新增多個帳戶。dn,objectclass,samaccountname,userprincipalname,displayname,useraccountcontrol cn mary,ou market,dc sina,dc com user,mary,mary sina.com,mar...