Che cos'è un WebSocket?

Aggiornato: ottobre 2026

Un WebSocket è una connessione persistente e bidirezionale tra client e server: ogni lato invia messaggi nell’istante in cui accadono. HTTP ha costruito il web chiedendo; i WebSocket lo hanno reso vivo ascoltando – un solo upgrade standardizzato (RFC 6455) trasforma una richiesta in un canale aperto, e tutto ciò che sul web è in tempo reale – chat, presenza, ticker, cursori collaborativi – ci viaggia sopra.

Punti chiave

DomandaRisposta
Che cos’èUna sola connessione persistente e full-duplex – push del server, invio del client, stesso tubo
vs. HTTPRichiesta-risposta stateless vs. canale aperto con stato
L’handshakeGET HTTP + Upgrade → 101 Switching Protocols → frame
Le regole di produzioneSempre wss://, heartbeat + riconnessione con backoff, pianificare il fan-out
Il livello superioreLa sincronizzazione in tempo reale – query e stato sul socket, non messaggi grezzi

Come funziona l’upgrade dell’handshake WebSocket (HTTP 101)

GET /chat HTTP/1.1                      ← inizia come HTTP ordinario
Host: example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==

HTTP/1.1 101 Switching Protocols        ← e qui smette di essere HTTP
Upgrade: websocket
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=

# Da qui in avanti: frame minuscoli (2–14 byte di overhead), in entrambi i sensi,
# contro i ~500+ byte di header di ogni singolo poll HTTP.

La maggior parte delle applicazioni non dovrebbe scrivere a mano ciò che viene dopo – l’idioma di produzione è un livello gestito di tempo reale, in cui socket, heartbeat e riconnessione sono codice di qualcun altro:

// JavaScript / Node.js — Back4app JS SDK (Live Query over WebSockets)
// One WebSocket, managed for you: connect, subscribe, reconnect
const query = new Parse.Query('Message');
query.equalTo('room', 'general');

const subscription = await query.subscribe();  // wss:// under the hood
subscription.on('create', (msg) => appendToChat(msg));
subscription.on('open', () => setStatus('live'));
// Later: subscription.unsubscribe();

WebSocket vs. tutto il resto che muove dati

TrasportoDirezioneCome funzionaIdeale per
PollingIl client chiede in continuazioneUna richiesta intera per controlloSolo come ripiego legacy
Long pollingIl client chiede, il server temporeggiaUna richiesta in attesa per messaggioRipiego di compatibilità
SSESolo server → clientHTTP in streaming, riconnessione autoFeed, ticker, notifiche
WebSocketEntrambi i sensiTCP persistente dopo l’upgradeChat, giochi, collaborazione, sync
WebRTCPeer ↔ peerCanali UDP media/datiChiamate, video – segnalati via WebSocket
Il polling HTTP a confronto con una connessione WebSocketCon il polling il client invia di continuo richieste HTTP complete che per la maggior parte non riportano nulla di nuovo; con un WebSocket una sola connessione aggiornata resta aperta e il server spinge ogni messaggio nell'istante in cui si verifica.

WebSocket

un solo canale aperto
messaggi nei due sensi, subito

Client

Server

Polling

richiesta #1 …vuota

richiesta #2 …vuota

richiesta #3 …messaggio!

Client

Server

Con il polling il client invia di continuo richieste HTTP complete che per la maggior parte non riportano nulla di nuovo; con un WebSocket una sola connessione aggiornata resta aperta e il server spinge ogni messaggio nell'istante in cui si verifica.

Far girare i socket in produzione

Quattro concetti portano il carico operativo. Affinità di sessione: le connessioni hanno stato, quindi i load balancer devono tenere ogni client appuntato al proprio nodo. Fan-out: trasmettere un messaggio a diecimila sottoscrittori distribuiti su molti nodi richiede un backplane pub/sub fra i server – il messaggio viaggia da server a server prima di viaggiare da server a client. Backpressure: non si può lasciare che un telefono lento su una rete scadente accumuli messaggi senza limite nella memoria del server; occorre scartare, accorpare o disconnettere. Vitalità: i frame ping/pong più gli heartbeat applicativi rilevano le connessioni mezze morte, e i client si riconnettono con backoff esponenziale e jitter, poi ri-sottoscrivono il proprio stato – il passaggio che le implementazioni ingenue dimenticano. Niente di tutto questo è esotico; tutto questo spiega perché “apriamo un socket e via” diventa una decisione di piattaforma.

Dai messaggi alla sincronizzazione: il livello sopra

I WebSocket grezzi muovono byte; le applicazioni vogliono stato. Il gradino superiore è la sincronizzazione in tempo reale: invece di inventare a mano tipi di messaggio e contabilità lato client, si sottoscrivono dei dati – una query, un documento, un canale – e il livello consegna eventi di cambiamento precisi, gestisce riconnessione e recupero e applica i permessi lato server per singolo sottoscrittore. È il modello delle live queries: i WebSocket come trasporto, un motore di query come cervello. Se il codice WebSocket accumula switch sui tipi di messaggio, questo livello è già in corso di ricostruzione a mano.

Casi d’uso tipici

  • Chat e messaggistica – il caso canonico: parlano entrambi i lati, subito.
  • Presenza – chi è online, chi sta scrivendo: messaggi minuscoli, ad alta frequenza, nei due sensi.
  • Editing collaborativo – documenti e lavagne condivise, dove posizioni del cursore e modifiche scorrono in continuo.
  • Dashboard in diretta e ticker – push dal server di numeri che si muovono; anche SSE va bene quando il flusso è a senso unico.
  • Multigiocatore e posizione – stato di gioco e marcatori di mappa in movimento, dove la latenza è il prodotto.

Serve un socket? Matrice decisionale

Scegliere i WebSocket quando…L’HTTP ordinario è giusto quando…
Gli utenti guardano dati che cambiano adessoI dati cambiano raramente o su richiesta
Entrambi i lati avviano messaggiSolo il client chiede, sempre
La latenza è visibile all’utente (chat, giochi)Un poll ogni 30 secondi basterebbe davvero
Scorrono di continuo molti messaggi piccoliLe risposte sono grandi e memorizzabili in cache
Il fan-out resta da gestire in proprio o da affittareDell’esercizio dei socket non risponde nessuno

E la via di mezzo che la matrice nasconde: i casi solo da server a client (feed, notifiche) stanno bene su SSE, con meno macchinario – il confronto completo fra i trasporti ha una voce propria nel registro di questo glossario.

Limiti e trade-off

  • Lo stato è il prezzo del push. Ogni connessione aperta è memoria del server e un vincolo di bilanciamento del carico; l’assenza di stato di HTTP reggeva più peso di quanto sembrasse.
  • Le reti detestano le connessioni di lunga durata. Proxy, radio mobili e portatili che si richiudono tagliano socket di continuo – la logica di riconnessione non è un caso limite, è il ciclo principale.
  • La sicurezza si sposta sulla connessione. Autenticare alla connessione, validare ogni messaggio, applicare l’autorizzazione per singola sottoscrizione – e sempre wss.
  • Qui la cache non esiste. Tutto ciò che viene spinto è calcolato e consegnato per singolo client; il CDN non può fare nulla.
  • La sincronizzazione scritta a mano è una trappola. La distanza fra “ho aperto un socket” e “sincronizzazione di stato corretta, con riconnessione e permessi” è dove vive l’ingegneria vera – ed è esattamente il livello che conviene affittare.

I WebSocket su Back4app

Back4app è una piattaforma open-source di Backend as a Service (BaaS) che combina database gestito, API REST e GraphQL generate automaticamente, autenticazione, archiviazione di file e funzioni serverless con Cloud Code. Il suo livello di tempo reale è Live Query: trasporto WebSocket, heartbeat, riconnessione e fan-out multi-nodo girano come infrastruttura gestita (con sotto il protocollo aperto LiveQuery), mentre il codice applicativo sottoscrive delle query e riceve eventi di cambiamento tipizzati – con le ACL applicate per singolo sottoscrittore, così che il tempo reale non scavalchi mai il modello dei permessi. Le schede di codice qui sopra sono tutta la storia lato client.

Domande frequenti

Che cos'è un WebSocket in parole semplici?

Una telefonata invece di uno scambio di lettere. HTTP funziona a richiesta-risposta: il client chiede, il server risponde, la linea si chiude. Un WebSocket apre una sola connessione persistente su cui entrambi i lati possono inviare messaggi in qualsiasi momento, con pochi byte di framing per messaggio invece di header completi. È il trasporto standard (RFC 6455) di chat, dati in diretta e collaborazione.

In che cosa un WebSocket differisce da HTTP?

Direzione e durata. HTTP è stateless e parte dal client: ogni scambio è una richiesta nuova con header completi, e il server non può mai parlare per primo. Un WebSocket nasce come richiesta HTTP, fa un upgrade e diventa un canale full-duplex con stato in cui il server spinge senza che nessuno glielo chieda – che è tutto il punto per qualunque cosa cambi mentre l'utente guarda.

Come funziona l'handshake WebSocket?

Comincia come HTTP educato: il client invia un GET con gli header Upgrade e Connection più una Sec-WebSocket-Key casuale; il server risponde 101 Switching Protocols con un hash di accettazione derivato da quella chiave. Da quell'istante la connessione TCP smette di parlare HTTP e trasporta leggeri frame WebSocket in entrambi i sensi, finché uno dei due lati non la chiude.

Qual è la differenza tra ws:// e wss://?

La stessa che c'è tra http e https: wss fa passare la connessione su TLS. Il traffico di produzione è sempre wss – per riservatezza e, pragmaticamente, perché le connessioni cifrate attraversano i proxy e le middlebox aziendali che storpiano gli upgrade in chiaro. Non esiste alcuna ragione legittima per mandare ws in produzione.

Qual è la differenza tra WebSocket e Server-Sent Events?

La direzione. SSE è a senso unico – il server trasmette verso il client su HTTP ordinario, con riconnessione automatica integrata – ed è ideale per feed, ticker e notifiche. I WebSocket sono bidirezionali, per tutti i casi in cui parla anche il client: chat, giochi, editing collaborativo. SSE è più semplice dove basta; i WebSocket sono lo strumento generale.

Come funzionano riconnessioni e heartbeat?

Il protocollo include frame di controllo ping/pong perché ogni lato verifichi che l'altro è vivo; le applicazioni aggiungono sopra degli heartbeat per rilevare le connessioni mezze morte, poi si riconnettono con backoff esponenziale più jitter e ri-sottoscrivono il proprio stato. I livelli gestiti di tempo reale si occupano di questo ciclo al posto di chi sviluppa – il codice WebSocket scritto a mano che lo salta funziona fino al giorno in cui le reti si comportano come reti.

I WebSocket scalano?

Sì, con una meccanica diversa da HTTP: le connessioni hanno stato, quindi i load balancer hanno bisogno di affinità di sessione; trasmettere a molti client richiede un backplane pub/sub perché ogni nodo possa fare il fan-out dei messaggi; e i consumatori lenti impongono una gestione della backpressure, perché un client bloccato non gonfi la memoria del server. Sono problemi risolti – in un'infrastruttura che si costruisce o si affitta.

Quando conviene NON usare i WebSocket?

Quando la richiesta-risposta già basta: recuperare risorse memorizzabili in cache, CRUD standard, aggiornamenti infrequenti. Una connessione persistente compra il push immediato e lo paga in stato – inutile per dati che cambiano raramente. La regola empirica: se un poll ogni 30 secondi basterebbe davvero, si può fare a meno del socket.

Termini correlati

Confronta con

Fonti di approfondimento

Pronto a costruire il tuo backend?

Avvia il tuo progetto su Back4app in pochi minuti: database, autenticazione, API e Cloud Code inclusi. Nessuna carta di credito richiesta.

Scritto e revisionato da Back4app Engineering, Back4app Engineering · Pubblicato il 2026-10-06