Supportato da
Javascript
SGC Default Protocol e MQTT implementano QoS (Quality of Service) per la consegna dei messaggi. Esistono 3 tipi diversi:
Livello 0: "Al massimo una volta", dove i messaggi vengono consegnati secondo i migliori sforzi della rete TCP/IP sottostante. Possono verificarsi perdite o duplicazioni di messaggi. Questo livello potrebbe essere utilizzato, ad esempio, con dati di sensori ambientali in cui non importa se una singola lettura viene persa, poiché la successiva verrà pubblicata poco dopo.
Livello 1: "Almeno una volta", in cui i messaggi hanno la garanzia di arrivare ma potrebbero verificarsi duplicati.
Livello 2: "Esattamente una volta", dove i messaggi sono garantiti per arrivare esattamente una volta. Questo livello potrebbe essere utilizzato, ad esempio, con i sistemi di fatturazione dove messaggi duplicati o persi potrebbero portare all'applicazione di addebiti errati.
Il messaggio viene consegnato secondo le migliori possibilità della rete TCP/IP sottostante. Non è prevista una risposta e nel protocollo non sono definite semantiche di ripetizione. Il messaggio arriva al server una volta sola oppure non arriva affatto.
La tabella seguente mostra il flusso del protocollo QoS livello 0.
| Client | Messaggio e direzione | Server |
|---|---|---|
| QoS = 0 | PUBLISH ----------> |
Azione: Pubblica un messaggio agli iscritti |
La ricezione di un messaggio da parte del server viene confermata tramite un messaggio ACKNOWLEDGEMENT. Se si verifica un errore identificato del collegamento di comunicazione o del dispositivo di invio, oppure il messaggio di conferma non viene ricevuto dopo un periodo di tempo specificato, il mittente reinvia il messaggio. Il messaggio arriva al server almeno una volta.
Un messaggio con livello QoS 1 ha un Message ID nel messaggio.
La tabella seguente mostra il flusso del protocollo QoS livello 1.
| Client | Messaggio e direzione | Server |
|---|---|---|
| QoS
= 1 Message ID = x Action: Archivia messaggio |
PUBLISH ----------> |
Azioni:
|
| Azione: Scarta messaggio | CONFERMA DI RICEZIONE<---------- |
Se il client non riceve un messaggio di ACKNOWLEDGMENT (né entro un periodo di tempo definito nell'applicazione, né in caso di rilevamento di un errore e riavvio della sessione di comunicazione), il client può reinviare il messaggio PUBLISH.
I flussi di protocollo aggiuntivi superiori al livello QoS 1 garantiscono che i messaggi duplicati non vengano consegnati all'applicazione ricevente. Questo è il livello di consegna più elevato, da utilizzare quando i messaggi duplicati non sono accettabili. Si registra un aumento del traffico di rete, ma di solito è accettabile per l'importanza del contenuto del messaggio.
Un messaggio con QoS livello 2 ha un Message ID nel messaggio.
La tabella seguente mostra il flusso del protocollo QoS livello 2. Sono disponibili due semantiche per la gestione di un flusso PUBLISH da parte del destinatario.
| Client | Messaggio e direzione | Server |
|---|---|---|
| QoS
= 2 Message ID = x Action: Archivia messaggio |
PUBLISH ----------> |
Azione: Memorizza il messaggio |
PUBREC <---------- |
Message ID = x | |
| Message ID = x | PUBREL ----------> |
Azioni:
|
| Azione: Scarta messaggio | ACKNOWLEDGEMENT <---------- |
Message ID = x |
Se viene rilevato un errore, o dopo un periodo di tempo definito, il flusso del protocollo viene ripetuto a partire dall' ultimo messaggio di protocollo non confermato. I flussi di protocollo aggiuntivi garantiscono che il messaggio venga consegnato agli iscritti esattamente una volta.