MQTTトピックで特殊文字を使用する必要がありますか?


7

MQTTを使用してすべてのESP8266ユニットを接続しましたが、トピックに関する一般的な質問があります。www.hivemq.comによると:

  • 「先行スラッシュ」/は避けてください。
  • スペースは避けてください。
  • ASCII文字のみを使用してください。
  • 一意の識別子またはClientIdをトピックに埋め込みます。
  • 等。

私はほとんどこれに適用しましたが、いくつかの特殊文字(たとえば、%および°)を使用します。たとえば、私は使用します:

Garage_Sensor_001/Temperature/°C value

Livingroom_HID_002/Switch_001/Action value

Bedroom_Sensor_001/Motion_001/Detection value

すなわち

PLACEMENT_OF_NODE/TYPE_OF_SENSOR_UNIT_OR_ACTION/FUNDAMENTAL_UNIT_OF_VALUE_IF_ANY

だから私の質問は:MQTTトピックに名前を付けるときに特殊文字を使用する必要がありますか?

回答:


6

Goufaliteはこの問題について完全に正しいです。それはまったく技術的な問題ではなく、単なる名前の問題なので、多くのアドバイスは、どの名前が最適かという著者の考えに基づいて非常に意見が分かれています。

MQTT 3.1仕様は言います

  • トピック名とトピックフィルターでは大文字と小文字が区別されます
  • トピック名とトピックフィルターにスペース文字を含めることができます
  • トピック名とトピックフィルターはUTF-8でエンコードされた文字列であり、65535バイトを超えてエンコードしてはなりません(MUST NOT)

したがって、純粋に技術的な観点から言えば、ASCIIのみで「スペースなし」のルールは必要ありません。すべての準拠MQTTブローカーは、それらを正常に処理できるはずです。

とにかく、HiveMQが指摘するいくつかの点に本当に同意しません。

スペースは各プログラマーの天敵であり、多くの場合、トピックが読みにくく、デバッグが困難になります。最初のものと似ていますが、何かが許可されているからといって、それを使用する必要があるという意味ではありません。UTF-8は多くの異なる空白タイプを認識しています。そのような珍しい文字は避けなければならないことは明らかです。

SPACEキーボードのキーを押す以外の方法でスペースを使用することはほとんどないため、ホモグリフの誤った使用が実際に問題になることはないと思います。

ASCII以外のUTF-8文字を使用すると、文字セットに関連するタイプミスや問題を見つけることが非常に難しくなります。文字が正しく表示されないことが多いためです。本当に必要でない限り、トピックで非ASCII文字を使用しないことをお勧めします。

公平な点-非ASCII文字の入力は大きな問題になる可能性があります。個人的にはGarage_Sensor_001/Temperature/°C、多くのキーボードには度記号が組み込まれていないため、単純に回避します(英国のキーボードには確かにありません!)。この決定は、プロトコルによるのではなく、実際に実用性に基づいています。大した手間をかけずに特殊文字を使用でき、他の誰も文字を入力する必要がないと確信している場合は、それを試してください!

また、私はHiveMQのアドバイスの一部について少し懐疑的です。リンクしたページのさらに先には、「#に登録しないでください」と表示されていますが、これはサイトで既に異議を唱えられています


8

トピックの命名は、変数の命名と同じ問題だと思います。一般的なアプリケーションの設計です。

別の方法に変えましょう:実装プログラミング言語はどのようにして特殊文字を管理しますか?スペース?アクセント?...特にそれらを分割する場合は、「スラッシュなし」ルールが適用されます。

UTF-8 / ASCIIコードページを完全に制御できる場合(信頼してください、そうではありません)、次に進んでください!アクセント、チャームを入れて!

次に、次のことを考えてください。これはすべてのプロジェクトに当てはまります。

  • エボリューティビティ:プロジェクトの担当者は誰ですか?君は?オープンソースのコミュニティ?誰でも(あなたでも)複雑で長いトピック名を入力する必要がないように簡単にしてください。
  • I18N:正直なところ、人気のプロジェクトは英語ですが、英語にはアクセントがありません!

2

ASCII文字のみを使用してください。

Network InterchangeのASCII形式は、ASCII範囲が16進数の0から7F、つまり128文字に及ぶことを指定しています。%はサポートされるべきですが、°はサポートされないと思います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.