Según este blog , Mosquitto (el corredor de MQTT) ahora admite la conexión a clientes a través de sockets web. El artículo de blog parece dar a entender que las tomas de web son más útiles para aplicaciones de navegador, ya que los navegadores web no son compatibles con los sockets TCP adecuados (todavía), aunque el protocolo websocket está apoyada por la mayoría de los navegadores modernos.
Si solo tengo varios clientes en una red (p. Ej., Sensores y actuadores basados en microcontroladores como Raspberry Pis), ¿habrá alguna ventaja al usar sockets web sobre conexiones TCP directas? ¿Vale la pena la sobrecarga del protocolo de socket web cuando se está comunicando con un navegador?
mqtt
mosquitto
web-sockets
Aurora0001
fuente
fuente
Respuestas:
La pregunta aquí parece ser "¿debería usar MQTT sobre TCP, o usar MQTT sobre websockets (que también va sobre TCP)?" En otras palabras, ¿"encapsular MQTT en el protocolo websockets es una buena idea?"
Esto depende (casi) completamente de su aplicación y de si necesita compatibilidad con WebSockets, probablemente para consumir mensajes en un navegador o por razones de firewall. Si no puede hacer que su servidor sea accesible en el puerto 1883 o superior 8883 para MQTT puro, entonces Websockets puede ser su mejor opción.
Websockets requiere ancho de banda adicional, pero si eso es importante para usted es algo que solo usted puede responder.
También vale la pena señalar que en las versiones actuales de Mosquitto, los websockets no funcionan tan bien como podrían, por lo que puede haber una latencia adicional al enviar / recibir mensajes de websockets. Sin embargo, eso es algo que no será un problema en futuras versiones.
fuente
Cuando se comunica solo dentro de su red ( intranet ), usar TCP puro estará bien. Pero si tiene que conectarse a otro servidor, surgirán problemas.
Porque la mayoría de los servidores modernos no permiten que los clientes se conecten a través de puertos aleatorios. Solo permiten la conexión de algunos puertos dedicados. Eso es todo. Por lo tanto, si tiene que conectarse a otro servidor, es mejor usar websocket en lugar de una conexión TCP pura.
Si está considerando la sobrecarga, no es mucho más grande. Puede consultar este artículo , si desea saber más sobre los gastos generales del websocket.
En mi opinión personal, es mejor usar websocket siempre, excepto que tiene algunas preocupaciones serias.
fuente
tl; dr: siempre prefiera bibliotecas gratuitas a codificarlo usted mismo (a menos que tenga requisitos extremos)
¿Que tan larga es una pieza de cordon? (YMMV)
Solo puedo hablar en general, pero siempre prefiero las bibliotecas de envoltorios a los sockets sin procesar (o, de hecho, a codificar cualquier cosa que pueda obtener gratis de una biblioteca).
Hacen que la codificación sea más simple y menos propensa a errores. Se ocupan de una gran cantidad de tareas domésticas y manejo de errores, que es un código que tendrías que escribir y depurar tú mismo, donde una biblioteca generalmente ha sido bien revisada y probada y está siendo utilizada por miles de otros, todos los cuales informará / corregirá errores por usted.
Además, es menos código para mantener (y, posiblemente, puerto), lo que significa más tiempo para desarrollar, probar y pulir su aplicación, o pasar a la siguiente.
Podría decirse que la única sobrecarga es una llamada de función, si acepta que toda esa bondad del bibliotecario (manejo de errores, mantenimiento de mangueras y similares) es algo que tendría que codificar usted mismo para obtener un software bueno y estable.
Si le preocupa el rendimiento, solo perfil. Pero, a menos que su socket esté activo cientos de veces por segundo, ni siquiera me molestaría.
fuente