Junior
Cosa sono i WebSocket?
sobes.tech AI
Risposta dell'AI
Websockets (Websockets) sono un protocollo di comunicazione bidirezionale tramite una singola connessione TCP, che consente lo scambio di dati in tempo reale tra browser e server.
Principali differenze rispetto alle richieste HTTP tradizionali:
- Comunicazione bidirezionale: Il server può inviare dati al client senza una richiesta preventiva.
- Una sola connessione: Viene stabilita una connessione di lunga durata, eliminando i costi di stabilire una nuova connessione per ogni scambio di dati (come in HTTP).
- Riduzione della latenza: Meno tempo viene speso per stabilire la connessione, scambiare intestazioni e gestire richieste/risposte brevi.
Principio di funzionamento:
- Handshake: Il browser invia una richiesta HTTP speciale al server (con intestazioni
Upgrade: websocketeConnection: Upgrade). - Stabilimento della connessione: Se il server supporta i websocket, risponde con il codice
101 Switching Protocols, dopodiché la connessione passa al protocollo websocket. - Trasmissione dei dati: Dopo aver stabilito la connessione, entrambe le parti possono scambiarsi liberamente messaggi in qualsiasi momento.
Esempi di utilizzo:
- Giochi online
- Chat e messaggistica
- Aggiornamenti in tempo reale dei dati (quotazioni, notizie)
- Strumenti collaborativi
Vantaggi:
- Bassa latenza
- Uso efficiente delle risorse (meno overhead)
- Comunicazione bidirezionale in tempo reale
Svantaggi:
- Richiede supporto sia lato client (browser) che lato server.
- Implementazione più complessa rispetto alle semplici richieste HTTP.
Esempio di codice client in JavaScript:
// creazione di websocket
const socket = new WebSocket('wss://example.com/websocket');
// gestore di apertura della connessione
socket.onopen = function(event) {
console.log('Connessione stabilita');
socket.send('Ciao, server!'); // invio di un messaggio al server
};
// gestore di ricezione del messaggio
socket.onmessage = function(event) {
console.log('Messaggio ricevuto dal server: ' + event.data);
};
// gestore di chiusura della connessione
socket.onclose = function(event) {
if (event.wasClean) {
console.log(`Connessione chiusa correttamente, codice=${event.code} motivo=${event.reason}`);
} else {
console.log('Connessione interrotta'); // ad esempio, a causa di un problema di rete
}
};
// gestore di errore
socket.onerror = function(error) {
console.error(`Errore websocket: ${error}`);
};
// chiusura della connessione (se necessario)
// socket.close();