Le sessioni persistenti sono un’altra caratteristica dell’MQTT che contribuisce alla sua funzionalità e popolarità come protocollo di comunicazione per dispositivi connessi. Andremo a vedere come l’utilizzo di sessioni persistenti e il concetto relativo all’accodamento dei messaggi rende le implementazioni dell’IoT o dell’automazione industriale più resilienti.
Cos’è la sessione persistente?
Nel modello di esecuzione dei messaggi publish / subscribe dell’MQTT, i client si connettono ai broker per pubblicare o sottoscrivere degli specifici argomenti dei messaggi. Un client può essere sia publisher che subscriber. I client non comunicano direttamente. Infatti, i messaggi su un argomento particolare sono pubblicati e consegnati ad un broker MQTT. Il broker rende disponibili le informazioni ai client con sottoscrizione a quell’argomento.
Quando un client si connette ad un broker, la connessione può essere persistente o non persistente. Un altro termine utilizzato per una sessione non persistente è “sessione pulita”. Una sessione pulita va bene per i client che pubblicano solo messaggi e non vogliono sottoscriversi ad alcun argomento. Il broker non immagazzina alcuna informazione di sottoscrizione dei messaggi non consegnati per i client che si connettono con una sessione pulita. I client informano il broker delle loro intenzioni utilizzando il flag di sessione pulita, che indica se è richiesta una sessione persistente.
Se un client è disconnesso alla pubblicazione di messaggi su argomenti sottoscritti, il client non riceve quei messaggi. Alla disconnessione con una sessione pulita, si perdono le sottoscrizioni e un client deve sottoscriversi nuovamente quando si riconnette al broker. Questo può comportare delle difficoltà in quanto aggiunge sovraccarico ai client che sono vincolati da risorse limitate. Le sessioni persistenti forniscono una soluzione a questo problema salvando le informazioni che riguardano un client sul broker. Una sessione persistente viene identificata da un client ID e permette ai client che sono offline di ricevere i messaggi che vengono inviati mentre sono disconnessi.
Il ruolo del Broker e del Client nelle Sessioni Persistenti
Il broker gioca un ruolo fondamentale in una sessione persistente. È responsabile della memorizzazione delle informazioni per i client anche se sono offline e di renderle immediatamente disponibili quando si riconnettono. Il broker memorizza i seguenti elementi per un client:
- L’esistenza di una sessione
- Tutte le sottoscrizioni del client
- Tutti i messaggi con la Qualità di Servizio (QoS) del livello 1 o 2 non confermati dal client
- Qualsiasi messaggio di QoS 1 o 2 perso dal client mentre era disconnesso
- Tutti i messaggi di QoS 2 ricevuti dal client ma non pienamente riconosciuti.
I livelli di QoS 1 e 2 sono progettati per garantire che i messaggi siano consegnati in reti non affidabili. Una QoS di livello 1 definisce un messaggio che deve essere consegnato almeno una volta e la QoS di livello 2 significa che deve essere consegnato esattamente una volta. Combinata con la capacità di memorizzare o accordare messaggi per sessioni persistenti, questa funzionalità rende l’MQTT un potente mezzo di comunicazione tra dispositivi in rete.
Scenari d’utilizzo per sessioni persistenti e pulite
Le sessioni persistenti sono richieste da un client quando si connette a un broker impostando il flag clean session su “falso”. Impostando il flag su “vero” si ottiene una sessione non persistente in cui i messaggi si perdono se il client si disconnette. Una volta creata una sessione persistente, tutti i messaggi e le informazioni vengono salvati fino a quando il client non richiede una sessione pulita. Una sessione precedentemente creata e disponibile per un client può essere usata per consegnare messaggi quando viene richiesta una sessione persistente.
- Le sessioni persistenti dovrebbero essere utilizzate quando il client ha bisogno di ricevere tutti i messaggi su un certo argomento appena è online. Una sessione persistente è anche raccomandata per i client con risorse limitate, per eliminare la necessità di sottoscriversi di nuovo agli argomenti dopo essersi disconnessi. Infine, i client che hanno bisogno di riprendere tutti i messaggi di QoS 1 e 2 dopo una riconnessione dovrebbero richiedere una sessione persistente.
- Le sessioni pulite sono meglio utilizzate quando il client non ha bisogno di ricevere i messaggi che sono stati generati quando era offline. Anche i client che pubblicano solo sugli argomenti e che non sono sottoscritti dovrebbero utilizzare le sessioni pulite.
Attraverso l’utilizzo delle sessioni persistenti, può essere garantito che specifici client ricevano i messaggi importanti anche se vanno offline improvvisamente. I sistemi di automazione industriale complessi sono composti da numerosi componenti interconnessi, alcuni dei quali sono più critici di altri. L’uso appropriato di sessioni persistenti permette la creazione di sistemi più robusti che possono recuperare da interruzioni impreviste. Questa è una ragione in più per usare l’MQTT per la comunicazione tra dispositivi.