2013-04-16 38 views
0

我正在嘗試使用MQTT,並且遇到了一些奇怪的問題。這可能是由於我的具體設置,但我想我會問。MQTT主題和唯一性問題

我使用Node.JS和mqttjs作爲代理。我還使用用Java編寫的IBM ia92測試客戶端。

當我訂閱像/system/app這樣的主題,然後發佈消息到/system/appp時,雖然主題名稱不同,但我的客戶端收到此消息。請注意,如果我發佈到/system/ap,我沒有收到消息。當然發佈到/system/app工作正常。

這是否意味着MQTT「自動填充」類似的東西,或者這是客戶端/代理中的錯誤?我知道+#通配符,但這個「功能/缺陷」我不知道。

我使用的經紀人可以在這裏找到:

https://github.com/adamvr/MQTT.js/blob/master/examples/server/orig.js

它有關於這一點我已經嘗試過,爲什麼它的需要和它做什麼,找出23行一些奇怪的正則表達式。如果這不是一個功能,可能它可能是錯誤的原因?如果有人對此有任何想法,我會非常感激。

回答

1

我對MQTT一無所知,但'錯誤'似乎是由於正則表達式沒有錨定的事實而導致的,所以如果訂閱主題名稱可以在與其相對的主題名稱中找到,比賽將成功(在線40上的test)。

如果通過更改線23

, reg = new RegExp(topic.replace('+', '[^\/]+').replace('#', '.+$')); 

添加字符串錨$年底

, reg = new RegExp(topic.replace('+', '[^\/]+').replace('#', '.+') + '$'); 

它可能會阻止這種行爲。

我建議您在github回購中將其作爲問題打開。

+0

謝謝你,我在問題隊列中提出了這個問題,我們將看看它是如何發揮出來的。將盡快接受答案 – span

1

同意我會在mqtt.js跟蹤器上提出問題。

我還推薦向MQTT Google小組詢問這種協議規範問題,並且還針對rsmb和mosquitto brokers測試了同樣的事情,這些參考實現或多或少都是參考實現。

FWIW,IA92是真的(真的)很老,過時,也有一個可疑的許可證。如果您希望用於MQTT的Java客戶端檢查當前參考實現的Eclipse Paho。

+0

謝謝,我已經提出了問題隊列中的問題,我們將看到它如何發揮。另外,感謝Paho的提示,我不知道他們有一個可用於測試的客戶端。將研究它! – span

+1

Paho目前沒有像IA92那樣的獨立GUI(我提出了一個說我們需要它的錯誤!),但您可以使用Eclipse視圖進行測試。蚊子命令行樣本也非常方便。 –