MQTT sempre connesso e caricamento dati 4G


10

Sto lavorando a un progetto IoT che coinvolge migliaia di client MQTT collegati a un broker (mosquitto) tramite router / modem 4G / WiFi. Meno di 10 client sono collegati allo stesso router e i router provengono da luoghi diversi (città diverse).

In questo momento abbiamo pochissimi clienti e sono sempre connessi al broker. Da questa discussione so che non ci saranno problemi anche quando cresceranno fino a oltre 1000 unità.

La mia domanda riguarda il carico di traffico sulla connessione 4G. L'utente finale ha paura del consumo di dati con tutti quei "canali" aperti e non utilizzati. Per quanto ho capito quando non c'è attività vengono inviati solo i pacchetti keep-alive , anche se non riesco a trovare queste informazioni di sicuro nella documentazione MQTT.

Posso assumere che il traffico quando non vengono pubblicati pacchetti è trascurabile?

Risposte:


6

Le specifiche MQTT elencano i dettagli dei pacchetti PINGREQ e PINGRESP che compongono la transazione keep-alive.

Ciascuno ha una dimensione di soli 2 byte, quindi un evento keep-alive completo utilizza 4 byte in totale. Poiché è possibile controllare la frequenza con cui i pacchetti keep-alive vengono inviati per ciascun client in base alla velocità con cui è necessario sapere che la connessione è stata interrotta, si ha il pieno controllo della quantità di dati utilizzati quando non vengono pubblicati messaggi.

Se si desidera ridurre ulteriormente il carico di dati, è possibile che sia in esecuzione un broker separato prima del router 4G a cui si connettono i 10 dispositivi a cui viene quindi collegato al broker centrale. Ciò ridurrebbe il numero di pacchetti keep-alive a 1 per router 4G anziché a 1 per client. Ciò ha il vantaggio che i 10 dispositivi locali possono continuare a passare i messaggi tra loro se il collegamento si interrompe e è possibile utilizzare i messaggi conservati / Messaggi ultima volontà e Test per tenere traccia di quando i singoli client non funzionano.


L'uso di un broker intermedio è un buon consiglio, anche se temo che non si adatti a questo caso specifico. Utile da sapere, però!
Segna il

In ogni caso, conoscevo il comportamento di PINGREQ / RESP, ma quello che non ho trovato è che sono i soli pacchetti scambiati quando non c'è alcuna attività reale (cioè avviata dalle applicazioni utente). Potrei dedurlo dalla tua risposta, ma i documenti non sembrano affermarlo esplicitamente.
Mark,

Il timer keep-alive viene reimpostato ogni volta che viene ricevuto un pacchetto, non ricordo dove nelle specifiche questo sia detto in cima alla mia testa
hardillb

2
Volevo solo sottolineare che il suggerimento di introdurre un broker locale ha ancora più senso se non stiamo parlando di 2 byte per messaggio ma a causa di TCP / IP è più simile a 42 byte per messaggio, quindi 84 per un ciclo di ping.
xwoker,

1
@Mark Il fatto che solo i pacchetti Ping siano l'unica cosa inviata se non vengono inviati messaggi è implicito nelle frasi dopo questa tabella: docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/…
hardillb
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.