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 グループでこの種のプロトコル仕様の問題について質問し、多かれ少なかれ参照実装である rsmb および mosquitto ブローカーに対して同じことをテストすることもお勧めします。

FWIW、IA92 は本当に本当に (本当に) 古くて時代遅れで、疑わしいライセンスも持っています。MQTT 用の Java クライアントが必要な場合は、現在のリファレンス実装である Eclipse Paho をチェックしてください。

于 2013-04-16T22:40:18.723 に答える