Tag: websocket, realtime, tcp, wss, socket.io, networking
Livello: intermedio
TL;DR: Protocollo di comunicazione full-duplex su singola connessione TCP, ideale per applicazioni real-time a bassa latenza (chat, trading, gaming). Inizia con un handshake HTTP e fa l'upgrade al protocollo ws/wss.
-
Connessione persistente e bidirezionale (full-duplex) tra client e server.
-
Opera su livello TCP (porta 80 per ws://, porta 443 per wss://).
-
L'handshake iniziale avviene tramite richiesta HTTP con header Upgrade: websocket.
-
Risolve l'overhead degli header HTTP continui presenti nelle tecniche di long polling.
-
La comunicazione è basata su messaggi (frame), non su stream continui di byte.
-
Supporta l'invio di dati testuali (UTF-8) e binari (ArrayBuffer, Blob).
-
Non include meccanismi nativi di ricollegamento automatico o multiplexing di default.
-
L'API è esposta nativamente in tutti i browser moderni tramite l'oggetto globale WebSocket.
-
Q: Quando sceglieresti WebSocket rispetto a Server-Sent Events (SSE)?R: Scelgo WebSocket se ho bisogno di comunicazione bidirezionale a bassa latenza, come in un gioco. Uso SSE se il flusso dati è strettamente unidirezionale dal server al client.
-
Q: Come gestisci l'autenticazione in una connessione WebSocket?R: Passo un token tramite query string o header personalizzato durante l'handshake HTTP, oppure invio il token come primissimo messaggio subito dopo l'apertura del socket.
-
Q: Come mantieni attiva la connessione se non ci sono dati in transito?R: Implemento un meccanismo di heartbeat con messaggi di ping e pong a intervalli regolari, per evitare che firewall o load balancer chiudano la connessione inattiva.
-
Dimenticare di implementare un meccanismo di heartbeat, subendo drop silenziosi della connessione dai proxy.
-
Trascurare il limite di dimensione del payload, non frammentando i messaggi di grandi dimensioni.
-
Non gestire la logica di riconnessione esponenziale (exponential backoff) quando cade temporaneamente la rete.
-
Dimenticare di rimuovere i listener associati all'oggetto WebSocket al momento dello smontaggio dei componenti.
```const ws = new WebSocket('wss://api.example.com/stream?token=abc');
ws.onopen = () => {
ws.send(JSON.stringify({ action: 'subscribe', channel: 'market' }));
};
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
console.log('Dati ricevuti:', data);
};
ws.onerror = (error) => {
console.error('Errore WebSocket:', error);
};
ws.onclose = (event) => {
console.log('Chiusura. Codice:', event.code, 'Motivo:', event.reason);
// Logica di riconnessione qui
};
```
-
[ ] Implementazione del protocollo a livello Node.js puro (es. libreria ws).
-
[ ] Codici di chiusura standard (es. 1000 normale, 1006 anomala).
-
MDN Web Docs: WebSocket API
-
RFC 6455: The WebSocket Protocol