Sobes.tech
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:

  1. Handshake: Il browser invia una richiesta HTTP speciale al server (con intestazioni Upgrade: websocket e Connection: Upgrade).
  2. Stabilimento della connessione: Se il server supporta i websocket, risponde con il codice 101 Switching Protocols, dopodiché la connessione passa al protocollo websocket.
  3. 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();