volta stabilito (cioè il three-way handshake completa), una connessione TCP grezzo utilizza la larghezza di banda pari a zero a meno che:
- È inviare o ricevere dati
- TCP keepalives sono abilitati esplicitamente
A server o il client può abilitare i keepalive TCP. Un keepalive è un pacchetto a lunghezza zero inviato con il flag ACK
, ed è solo 54 byte inviati sul filo più un altro 54 per la risposta. Per impostazione predefinita, i keepalive TCP vengono inviati ogni due ore. In altre parole, completamente trascurabile.
Anche i WebSocket dispongono di un proprio meccanismo di keepalive (a deal with proxies). Il server o il client può inviare un frame PING
e l'altra estremità DEVE rispondere con un frame PONG
. Sebbene non ci sia un'API JS sul lato del browser per inviare PING
s, un server nodo potrebbe inviarli e un browser conforme risponderà automaticamente. (QtWebSockets ha un'API per inviare PING
s.) Questo non accade per impostazione predefinita; devi farlo manualmente. I frame WebSocket PING
e PONG
hanno almeno 7 byte e al massimo 131 byte ciascuno (più 54 byte di overhead TCP/IP). Quindi un singolo PING
/PONG
costa tra 122 e 370 byte.
ws non esegue automaticamente keepalive, né QtWebSockets. Quindi, per rispondere alla tua domanda, una configurazione predefinita usa una larghezza di banda pari a zero per mantenere la connessione TCP.
Tuttavia ...
keepalive sono importanti perché i dispositivi intermedi (cioè router NAT) scenderanno connessioni TCP inattive. A seconda delle reti tra il tuo server e i tuoi client, questo significa che se non hai keepalive, i tuoi client perderanno le loro connessioni (possibilmente senza saperlo, che è male), e dovranno ridistribuire la sessione WebSocket . Questo sarà probabilmente molto più costoso in termini di larghezza di banda rispetto all'abilitazione di keepalive equilibrati.
A PING
/PONG
ogni 5 minuti costa 1,5 - 4,4 KB all'ora (per cliente).
Nota: socket.io ha un proprio meccanismo di keepalive (separato dal WebSockets'), che è abilitato per impostazione predefinita. Il sio keepalive è gestito dalla libreria sio e avviene tramite il canale dati WebSocket (al contrario di WebSocket PING
/PONG
, che sono frame di controllo). Il server socket.io invia un messaggio keepalive di 8 byte (+ overhead) ogni 30 secondi, che equivale a circa 15 kB all'ora.
Quale livello di bandwdith ti preoccupa? Probabilmente questo è molto, molto piccolo - meno per un giorno di una singola immagine di buone dimensioni. – jfriend00
È fondamentalmente un server di notifica push. Diciamo che è su 8 ore al giorno. – Jacob
Non hai risposto alla mia domanda. Sei preoccupato per 100kb di larghezza di banda, 200MB di larghezza di banda, 200GB di larghezza di banda? Dov'è il tuo livello di preoccupazione? Mantenere i messaggi vivi sono molto piccoli, quindi non si sommano molto. In genere, un problema più grande è la durata della batteria sui dispositivi mobili. – jfriend00