javascript - MQTT 主题和唯一性问题

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

最佳答案

我对 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/

相关文章:

javascript - 将字符串中的字母按顺序大写并创建一个数组来存储

php - 正则表达式查找html div类内容和数据属性? (preg_match_all)

regex - 在R中提取电话号码问题

javascript - 在浏览器和 Node 中运行 CoffeeScript 类

node.js - TypeScript 构建错误 TS5023

javascript - 如何设计链式 Model.find() 函数?

javascript - V8 是否对作用域的各个部分进行垃圾回收?

javascript - 异步等待和可共享的 MongoDB 连接

javascript - 按顺序运行列表中的函数,直到一个函数解析为止

regex - 如何在 sublime text 的 Title Case 中更改所有 title 属性的值