MQTT: Um assinante pode enviar dados para um produtor de forma assíncrona?

7

Cenário Dispositivo IoT (atualmente dispositivo IPv4) que envia via soquete TCP uma carga útil para um servidor uma vez por dia. O servidor tem um endereço IP público, o dispositivo está atrás de um roteador / NAT. Vou usar um módulo baseado no ESP8266 (ou seja, o Olimex one)

Objetivo O servidor deve poder enviar dados para qualquer cliente sempre que necessário. Não estou interessado em comunicação direta de cliente para cliente (por exemplo, conectar-se a um dispositivo do meu smartphone) como o furador deve fazer.

Outros requisitos Os dispositivos IoT podem crescer até vários milhares. A conexão à Internet é fornecida por um roteador / modem habilitado para 4G.

Solução proposta Até onde eu entendo, uma solução comum é o MQTT. Os clientes enviam periodicamente dados para o broker (por exemplo, Mosquitto em execução no servidor de hospedagem), que por sua vez atualiza o aplicativo Web principal que é executado no mesmo servidor.

Pergunta O aplicativo da web pode enviar dados para qualquer cliente sempre que necessário por meio do broker? Em outras palavras: um assinante pode enviar dados de volta a um editor específico de forma assíncrona (ou seja, sem aguardar a próxima transmissão)?

Marca
fonte

Respostas:

8

Qualquer cliente MQTT pode se inscrever e publicar, não há distinção entre eles (somente regras possíveis da ACL controlando quais usuários podem fazer o que).

Também não há conceito de um determinado cliente enviando dados para outro cliente. As mensagens são publicadas para tópicos, não para outros clientes. Não há nada para impedir que um determinado cliente assine um tópico específico que outros clientes possam usar para enviar mensagens para esse cliente.

Também não é necessário aguardar uma assinatura recebida antes de publicar uma mensagem em um tópico.

O MQTT v5 inclui o conceito de sistema de mensagens no estilo de solicitação / resposta, mas o modo como faz isso é incluindo um campo de tópico extra em uma mensagem. Este tópico extra pode ser lido por um assinante e usado para publicar uma mensagem de resposta. Mas é apenas uma sugestão, não um requisito difícil.

Os Web Apps podem usar o MQTT sobre Websockets para conectar-se ao broker e se comportar da mesma maneira que qualquer outro cliente MQTT.

hardillb
fonte
Resposta clara. Se bem entendi, do ponto de vista do intermediário, o dispositivo IoT e o aplicativo Web são "clientes" que podem atuar como publicadores ou assinantes, conforme necessário. Por conta própria, defina um tópico que (por exemplo) permita que o aplicativo principal solicite a reinicialização de um dispositivo "now" - "now" é quando o dispositivo realmente troca dados com o broker.
Mark
Sim, isso praticamente cobre tudo
hardillb