0

我正在对 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 行有一些奇怪的正则表达式,我试图弄清楚为什么需要它以及它的作用。如果这不是功能,也许它可能是导致错误的原因?如果有人对此有任何想法,我将不胜感激。

4

2 回答 2

2

我对 MQTT 一无所知,但“错误”似乎是由于正则表达式未锚定这一事实引起的,因此如果可以在针对它进行测试的主题名称中找到订阅主题名称,则匹配将成功(在第test40 行)。

如果您$通过将第 23 行从

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

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

它可能会阻止这种行为。

我建议您在 github 存储库中将其作为问题打开。

于 2013-04-16T21:26:48.260 回答
1

同意我会在 mqtt.js 跟踪器上提出问题。

我还建议在 MQTT Google Group 上询问此类协议规范问题,并针对 rsmb 和 mosquitto 代理测试相同的东西,它们或多或少是参考实现。

FWIW,IA92 确实(真的)过时且过时,并且许可证也有问题。如果您想要一个用于 MQTT 的 Java 客户端,请查看 Eclipse Paho,它是当前的参考实现。

于 2013-04-16T22:40:18.723 回答