Utilizzo di WebSockets con Node.js
Il Bootcamp JavaScript Full-Stack del 2021 è ora aperto alle iscrizioni!
I WebSockets sono un’alternativa alla comunicazione HTTP nelle applicazioni web.
Offrono un canale di comunicazione bidirezionale di lunga durata tra client e server.
Una volta stabilito, il canale viene mantenuto aperto, offrendo una connessione molto veloce con bassa latenza e overhead.
Il supporto dei browser per i WebSockets
I WebSockets sono supportati da tutti i browser moderni.
Come i WebSockets differiscono da HTTP
HTTP è un protocollo molto diverso, e anche un modo diverso di comunicare.
HTTP è un protocollo richiesta/risposta: il server restituisce alcuni dati quando il client li richiede.
Con WebSockets:
- il server può inviare un messaggio al client senza che il client richieda esplicitamente qualcosa
- il client e il server possono parlare tra loro simultaneamente
- poco overhead di dati deve essere scambiato per inviare messaggi. Questo significa una comunicazione a bassa latenza.
I WebSockets sono ottimi per comunicazioni in tempo reale e di lunga durata.
HTTP è ottimo per lo scambio occasionale di dati e le interazioni iniziate dal client.
HTTP è molto più semplice da implementare, mentre i WebSockets richiedono un po’ più di overhead.
Secured WebSockets
Utilizzare sempre il protocollo sicuro e criptato per WebSockets, wss://
.
ws://
si riferisce alla versione non sicura di WebSockets (la http://
di WebSockets), e dovrebbe essere evitata per ovvie ragioni.
Crea una nuova connessione WebSockets
const url = 'wss://myserver.com/something'const connection = new WebSocket(url)
connection
è un oggetto WebSocket.
Quando la connessione viene stabilita con successo, viene sparato l’evento open
.
Ascoltatelo assegnando una funzione di callback alla proprietà onopen
dell’oggetto connection
:
connection.onopen = () => { //...}
Se c’è qualche errore, la funzione onerror
callback viene sparata:
connection.onerror = error => { console.log(`WebSocket error: ${error}`)}
Inviare dati al server usando WebSockets
Una volta aperta la connessione, puoi inviare dati al server.
Lo si può fare comodamente all’interno della funzione di callback onopen
:
connection.onopen = () => { connection.send('hey')}
Ricevere dati dal server usando i WebSockets
Ascolta con una funzione di callback su onmessage
, che viene chiamata quando l’evento message
viene ricevuto:
connection.onmessage = e => { console.log(e.data)}
Implementare un server WebSockets in Node.js
ws è una popolare libreria WebSockets per Node.js.
La useremo per costruire un server WebSockets. Può anche essere usata per implementare un client e usare WebSockets per comunicare tra due servizi di backend.
Si installa facilmente usando
yarn inityarn add ws
Il codice da scrivere è molto poco:
const WebSocket = require('ws')const wss = new WebSocket.Server({ port: 8080 })wss.on('connection', ws => { ws.on('message', message => { console.log(`Received message => ${message}`) }) ws.send('ho!')})
Questo codice crea un nuovo server sulla porta 8080 (la porta predefinita per i WebSockets), e aggiunge una funzione di callback quando viene stabilita una connessione, inviando ho!
al client e registrando i messaggi ricevuti.
Vedi un esempio dal vivo su Glitch
Ecco un esempio dal vivo di un server WebSockets: https://glitch.com/edit/#!/flavio-websockets-server-example
Ecco un client WebSockets che interagisce con il server: https://glitch.com/edit/#!/flavio-websockets-client-example
Scaricate il mio manuale gratuito su Node.js
Il Bootcamp JavaScript Full-Stack del 2021 è ora aperto per le iscrizioni fino a martedì prossimo! Non perdere questa opportunità, iscriviti OGGI!
Altri tutorial su node:
- le dipendenze di npm e devDependencies
- Come usare Sequelize per interagire con PostgreSQL
- Una breve storia di Node.js
- Usare WebSockets con Node.js
- Come ottenere sia il parsed body che il raw body in Express
- Come usare promises e await con le funzioni basate su callback di Node.js
- Come installare Node.js
- Un’introduzione al gestore di pacchetti npm
- Interagire con le API di Google Analytics usando Node.js