¿Debo usar caracteres especiales en los temas MQTT?


7

He usado MQTT para conectar todas mis unidades ESP8266, pero tengo una pregunta general sobre temas. De acuerdo con www.hivemq.com :

  • /Se debe evitar la "barra diagonal delantera" .
  • Se deben evitar los espacios.
  • Use solo caracteres ASCII.
  • Incruste un identificador único o el ClientId en el tema.
  • Etc.

Me he aplicado bastante a esto, pero uso algunos caracteres especiales (% y °, por ejemplo). Por ejemplo yo uso:

Garage_Sensor_001/Temperature/°C value

Livingroom_HID_002/Switch_001/Action value

Bedroom_Sensor_001/Motion_001/Detection value

Es decir

PLACEMENT_OF_NODE/TYPE_OF_SENSOR_UNIT_OR_ACTION/FUNDAMENTAL_UNIT_OF_VALUE_IF_ANY

Entonces mi pregunta es: ¿Debo usar caracteres especiales al nombrar temas MQTT?

Respuestas:


6

Goufalite tiene toda la razón sobre este problema: no es un problema técnico en absoluto, solo un problema de nomenclatura, por lo que muchos de los consejos son muy obstinados en función de la idea del autor de qué nombres son los mejores.

La especificación MQTT 3.1 dice :

  • Los nombres de tema y los filtros de tema distinguen entre mayúsculas y minúsculas
  • Los nombres de tema y los filtros de tema pueden incluir el carácter de espacio
  • Los nombres de tema y los filtros de tema son cadenas codificadas UTF-8, NO DEBEN codificar a más de 65535 bytes

Entonces, hablando puramente por razones técnicas, las reglas de solo ASCII y 'sin espacios' no son necesarias; todos los corredores MQTT que cumplan con los requisitos deberían poder manejarlos perfectamente.

De todos modos, no estoy de acuerdo con algunos de los puntos que HiveMQ hace:

Un espacio es el enemigo natural de cada programador, a menudo hacen que sea mucho más difícil leer y depurar temas, cuando las cosas no van como deberían, deberían serlo. De modo similar al primero, solo porque algo está permitido no significa que deba usarse. UTF-8 conoce muchos tipos diferentes de espacios en blanco, es bastante obvio que se deben evitar estos caracteres poco comunes.

Es muy poco probable que vayas a usar espacios de otra manera que solo presionar la SPACEtecla en tu teclado, por lo que no creo que el uso accidental de homoglifos sea ​​realmente un problema.

El uso de caracteres no ASCII UTF-8 hace que sea realmente difícil encontrar errores tipográficos o problemas relacionados con el conjunto de caracteres, porque a menudo no se pueden mostrar correctamente. A menos que sea realmente necesario, recomendamos evitar el uso de caracteres no ASCII en un tema.

Punto justo: escribir caracteres no ASCII puede ser un gran problema. Personalmente, evitaría Garage_Sensor_001/Temperature/°Csimplemente porque muchos teclados no tienen un símbolo de grados incorporado (¡los teclados británicos ciertamente no lo tienen!). Esta decisión se basa realmente en la practicidad más que en el protocolo; si puede usar caracteres especiales sin mucho alboroto y está seguro de que nadie más tendrá que escribir los caracteres, ¡adelante!

Además, sería un poco escéptico sobre algunos de los consejos de HiveMQ; más adelante en la página que ha vinculado, dice "No se suscriba a #", que ya se ha disputado en el sitio .


8

Creo que la denominación de temas es el mismo problema que la denominación de variables : diseño de aplicación común.

Vamos a decirlo de otra manera: ¿cómo gestiona su lenguaje de programación de implementación caracteres especiales? Espacios? Acentos? ... Especialmente cuando los divide, de ahí la regla de "sin barra diagonal".

Si tienes un control perfecto sobre las páginas de códigos UTF-8 / ASCII (confía en mí, no lo haces), ¡adelante! Pon acentos, caracteres especiales!

Luego piense en lo siguiente, y esto se aplica a todos los proyectos:

  • Evolutividad: ¿quién se encargará de su proyecto? ¿Usted? ¿Una comunidad de código abierto? Haga que sea sencillo para cualquiera (incluso usted) no tener que escribir nombres de temas complejos / largos.
  • I18N: seamos sinceros, los proyectos populares están en inglés y bueno, ¡el inglés no tiene acentos!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.