我正在尝试使用 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 行有一些奇怪的正则表达式,我试图弄清楚为什么需要它以及它的作用。如果这不是一个功能,也许它可能是错误的原因?如果有人对此有任何想法,我将不胜感激。
最佳答案
我对 MQTT 一无所知,但“bug”似乎是由于正则表达式未锚定而引起的,因此,如果可以在对其进行测试的主题名称中找到订阅主题名称,匹配将会成功(在第 40 行的 test
处)。
如果您通过更改第 23 行来添加字符串 anchor $
的结尾
, reg = new RegExp(topic.replace('+', '[^\/]+').replace('#', '.+$'));
至
, reg = new RegExp(topic.replace('+', '[^\/]+').replace('#', '.+') + '$');
它可能会阻止这种行为。
我建议您在 github 存储库中将其作为问题打开。
关于javascript - MQTT 主题和唯一性问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16046259/