Il protocollo WebSocket, descritto nelle specifiche RFC 6455 fornisce un mezzo di scambio dati tra server e browser utilizzando una connessione persistente. I dati vengono scambiati in entrambe le direzioni come dei “pacchetti” (packets), senza la necessità di interrompere la connessione o di creare nuovi headers-HTTP per le richieste successive.
I WebSocket sono particolarmente adatti per servizi che richiedono scambi continui di dati, come ad esempio giochi online, sistemi di trading in real-time e così via.
Un semplice esempio
Per aprire una connessione websocket, dobbiamo creare un new WebSocket utilizzando nell’url il protocollo speciale ws:
let socket = new WebSocket("ws://javascript.info");
C’è anche il protocollo criptato wss://, utilizzato per i websockets HTTPS
wss://Il protocollo wss:// non solo è criptato, ma è anche più affidabile.
Questo perché i dati del ws:// non sono criptati, visibili per qualunque intermediario. Server proxy molto vecchi, che non riconoscono l’implementazione WebSocket, potrebbero notare i suoi headers, per così dire, “strani” e decidere di interrompere la connessione.
Invece, wss:// è una connessione over TLS (lo stesso di HTTPS che è HTTP over TLS), TLS cripta il dato prima di inviarlo e lo decripta in ricezione. Così i dati passano attraverso i proxy in maniera criptata e non potendone vedere il contenuto lo lasciano passare.
Appena creato il socket, dovremmo rimanere in ascolto su di esso per gli eventi. Ce ne sono 4:
open– connessione stabilita (established connection),message– dati ricevuti (data received),error– errore websocket (websocket error),close– connessione chiusa (connection closed).
…E nel caso volessimo inviare qualcosa al server, allora abbiamo il metodo socket.send(data) che si occupa di questo.
Un esempio: