in Architettura Software, Informatica

Creare un client MQTT con C# – prima parte

In ambito IOT, uno dei protocolli maggiormente utilizzati è il MQTT.

MQTT è l’acronimo di Message Queuing Telemetry Transport, ed è un protocollo di comunicazione basato su TCP/IP, che utilizza il paradigma della pubblicazione/sottoscrizione verso un message broker.

Il protocollo MQTT è un protocollo ISO standard.

La porta TCP/IP 1883 è riservata dallo IANA (la Internet Assigned Numbers Authority che assegna gli Ip pubblici e le porte standard) all’esclusivo scambio di comunicazioni con MQTT.

Per quanto riguarda la comunicazione tramite SSL, la porta da utilizzare è la 8883.

La comunicazione tra i mittenti ed i destinatari avviene solo tramite il broker.

Inoltre i broker hanno anche il compito di gestire le autorizzazioni.

Non è possibile la comunicazione diretta.

In pratica al centro di tutto c’è il broker:

  • i destinatari dei messaggi si iscrivono ai canali a cui sono interessati
  • i client inviano messaggi con argomenti specifici
  • il broker procede con lo smistamento dei messaggi tra le due parti

Il protocollo MQTT è un protocollo ISO standard.

Una delle caratteristiche fondamentali di questo protocollo è quello di gestire una comunicazione decisamente “leggera”, basandosi su anni di presenza sul mercato e rendendo possibile l’utilizzo all’interno di reti latenze importanti.

Caratteristica importante del protocollo è quella di creare un canale attivo tra broker e client, rendendo possibile la comunicazione in tempo reale. Non è necessario che i vari client rimangano in ascolto delle informazioni ca cui sono interessati, perchè verranno aggiornati aggiornati in tempo reale. Non è necessario un continuo refresh per ottenere i dati.

Per esempio, un’applicazione mobile che vuole mostrare in tempo reale lo stato di apertura di un cancello non deve fare altro che ascoltare gli eventi “stato di apertura” generati dal cancello, mentre il device connesso al cancello in apertura, ogni volta che vede un cambiamento nello stato del cancello, emette un nuovo aggiornamento che l’app mobile riceve in tempo reale.

Si basa tutto sul tipo di interesse a cui il client si è sottoscritto.

A questo punto, la domanda piu ovvia potrebbe essere: perchè utilizzare MQTT e non HTTP (dal momento che ormai la maggior parte dei dispositivi utilizza il protocollo HTTP ?

Il primo motivo riguarda sicuramente la natura del protocollo HTTP, che è è un protocollo di tipo domanda/risposta. Una volta effettuata la connessione al server, effettuata la richiesta ed ottenuta la risposta, la connessione viene chiusa. Questo significa che la comunicazione per verificare eventuali aggiornamenti dovrebbe partire sempre al client e ad intervalli regolari.

Sicuramente un altro elemento importante è il tipo di comuncazione tra client e server. Quest’ultimo in situazioni ad elevato carico, si troverà a gestire numerose chiamate e rappresentando il collo di bottiglia per l’intero sistema. MQTT risolve questo problema facendo in modo che la comunicazione avvenga direttamente tra i singoli client.

Inoltre il protocollo HTTP è protocollo pesante, con un payload piuttosto importante, soprattutto nel momento in cui ci si trova a dover lavorare con applicazioni real-time.

Nel prossimo post vedremo in dettaglio quali sono i meccanismi di funzionamento di MQTT e successivamente svilupperemo una semplice applicazione.