MQTT (Message Queue Telemetry Transport)

Message Queue Telemetry Transport (MQTT) è un protocollo di trasporto di tipo publish/subscribe che gira al di sopra del protocollo TCP/IP. E’ semplice, leggero ed è uno standard aperto. Ciò lo rende ideale per l’uso in molte situazioni, come nella comunicazione Machine to Machine (M2M) e in applicazioni di tipo Internet of Things (IoT).

MQTT richiede la presenza di uno stack TCP/IP. Segger offre lo stack embOS/IP, ma qualsiasi stack TCP/IP che sia conforme con le specifiche RFC può essere utilizzato. Il pacchetto include un simulatore per Win32 che utilizza le API standard di Winsock e l’implementazione che si basa sulle API di embOS/IP.

MQTT utilizza un modello di funzionamento del tipo publish/subscribe, in opposizione al bel noto modello client/server. La differenza principale rispetto al classico modello client/server è che un client comunica direttamente con un endpoint (il server), mentre un protocollo publish/subscribe disaccoppia mittente e destinatario di un particolare messaggio. Nel contesto MQTT il server è chiamato publisher, il destinatario è chiamato subscriber. Publisher e Subscriber non si conoscono tra di loro e non comunicano direttamente. Per consentire il trasporto di un messaggio è necessario l’intervento di una terza parte chiamata “broker”. Il broker filtra tutti i messaggi in ingresso che arrivano dal publisher e li distribuisce ai sottoscrittori in base agli argomenti sottoscritti. MQTT utilizza un meccanismo di filtraggio dei messaggi basato sull’argomento (subject-based filtering). Il publisher invia messaggi inerenti a un argomento, il sottoscrittore riceve tali messaggi se si è registrato per ricevere un flusso relativo a un certo argomento.

Per ricevere i messaggi da un broker, il sottoscrittore stabilisce una connessione col broker. Il broker controlla se il publisher abbia inviato un messaggio dell’argomento cui è interessato il sottoscrittore e, se questo è il caso, lo inoltra al sottoscrittore. Il vantaggio di questo approccio è che publisher e subscriber non si devono conoscere necessariamente e non devono essere attivi allo stesso tempo.