MQTT: ¿Puede un suscriptor enviar datos a un productor de forma asincrónica?

7

Escenario Dispositivo IoT (actualmente dispositivo IPv4) que envía a través del socket TCP una carga útil a un servidor una vez al día. El servidor tiene una dirección IP pública, el dispositivo está detrás de un enrutador / NAT. Voy a usar un módulo basado en ESP8266 (es decir, Olimex uno)

Objetivo El servidor debe poder enviar datos a cualquier cliente cuando sea necesario. No estoy interesado en la comunicación directa de cliente a cliente (es decir, conectarme a un dispositivo desde mi teléfono inteligente) como se supone que debe hacer la perforación.

Otros requisitos Los dispositivos IoT pueden crecer hasta varios miles. Su conexión a Internet es proporcionada por un enrutador / módem habilitado para 4G.

Solución propuesta Hasta donde yo entiendo, una solución común es MQTT. Los clientes envían periódicamente datos al agente (es decir, Mosquitto que se ejecuta en el servidor de alojamiento), que a su vez actualiza la aplicación web principal que se ejecuta en el mismo servidor.

Pregunta ¿Puede la aplicación web enviar datos a cualquier cliente cuando lo necesite a través del intermediario? En otras palabras: ¿puede un suscriptor enviar datos a un editor específico de forma asincrónica (es decir, sin esperar la próxima transmisión)?

marca
fuente

Respuestas:

8

Cualquier cliente MQTT puede suscribirse y publicar, no hay distinción entre ellos (solo las posibles reglas ACL que controlan qué usuarios pueden hacer qué).

Además, no existe el concepto de que un cliente determinado envíe datos a otro cliente. Los mensajes se publican en temas, no en otros clientes. No hay nada que impida que un cliente determinado se suscriba a un tema específico que otros clientes pueden usar para enviar mensajes a ese cliente.

Tampoco es necesario esperar una suscripción entrante antes de publicar un mensaje sobre un tema.

MQTT v5 agrega el concepto de mensajes de estilo de solicitud / respuesta, pero la forma de hacerlo es mediante la inclusión de un campo de tema adicional en un mensaje. Este tema adicional puede ser leído por un suscriptor y utilizado para publicar un mensaje de respuesta. Pero solo está ahí como una pista, no es un requisito difícil.

Las aplicaciones web pueden usar MQTT a través de Websockets para conectarse al intermediario y comportarse de la misma manera que cualquier otro cliente MQTT.

hardillb
fuente
Respuesta clara. Si entiendo correctamente, desde el punto de vista del corredor, tanto el dispositivo IoT como la aplicación web son "clientes" que pueden actuar como editores o suscriptores según sea necesario. Luego, por mi cuenta, defino un tema que (por ejemplo) permite a la aplicación principal pedirle a un dispositivo que reinicie "ahora" - "ahora" es cuando el dispositivo realmente intercambia datos con el intermediario.
Mark
Sí, eso prácticamente lo cubre
hardillb