Cos’è Socket.io e come usarlo?
Node.js e comunicazioni real-time

Tempo di lettura: 4 minuti
Guida socket.io con Node.js, web socket

Socket.io: Passiamo al real-time!

Socket.io è una delle librerie più apprezzate da coloro che sviluppano con Node. js.

Perché?

Perché permette la comunicazione sincronizzata tra client e server, il che significa comunicazione in tempo reale!

Non riesci a capire cosa significhi?

Permettetemi di dirlo in un altro modo: socket.io ti permette, ad esempio, di creare un servizio di chat sul tuo sito web!

Le possibilità che offre socket.io sono davvero immense e vanno ben oltre la chat. E’ utile per tutto ciò che ha bisogno di comunicazione immediata tra i visitatori del tuo sito web. Questo può essere, ad esempio, il primo mattone per costruire un gioco in cui possiamo vedere i personaggi nel browser, il tutto senza bisogno di ricaricare la pagina!

E’ allettante, non trovi?!

Cosa fa socket.io?

Prima di iniziare a scrivere del codice, vorrei spiegare rapidamente l’ idea di Socket.io.

cos-e-socket-io-node-js-real-time-tempo-reale-applicazioni
Sito ufficiale di Socket.io

È una libreria che ci permette di semplificare un gran numero di attività, ma sarebbe sbagliato pensare che sia ‘magica‘. Socket.io si basa su una serie di tecniche diverse che permettono la comunicazione in tempo reale (e alcune di queste esistono da anni). La più conosciuta, e più recente, è WebSocket.

WebSocket? Non è una di innovazione dell’HTML5?

Si tratta di un recente sviluppo che è apparso più o meno nello stesso momento di HTML5, ma non è HTML: è una JavaScript API.

WebSocket è una funzione supportata da tutti i browser recenti. Consente lo scambio bilaterale sincronizzato tra client e server.

Spiegazione troppo complicata?

Non ti preoccupare, te lo spiego io!

La comunicazione sul web è di solito non sincronizzata. Internet è sempre stato strutturato così: il client chiede di visualizzare una pagina e il server risponde (vedi figura seguente).

comunicazione-client-server-richiesta-risposta-nodejs-socketio
Il client chiede e il server risponde: la comunicazione non è sincronizzata.

Questa struttura andava bene agli inizi ma ormai è diventata un po’ limitante, sopratutto per le applicazioni recenti. Serviva qualcosa di più reattivo e immediato per comunicare. Nello schema puoi vedere che il server non decide di inviare informazioni al client (ad esempio per notificargli che c’è un nuovo messaggio o aggiornamento). ma è il client a richiederle (ricaricare la pagina o con azioni simili). Tutto questo perché il server non ha nessun mezzo per inviare comunicazioni al client, a meno che non sia quest’ultimo a richiederlo.

WebSocket è il nome della tecnologia che consente di creare una sorta di “canale” di comunicazione sempre aperto tra client e server. Il browser e il server rimangono perennemente collegati e possono scambiarsi messaggi, sia in una direzione che nell’altra, proprio come se fosse un canale diretto. Con questa tecnologia il server può decidere, di propria volontà, di inviare un messaggio al client!

websocket-cosa-sono-come-funziona-socketio-nodejs
Con i WebSocket la comunicazione è sincronizzata: è come un canale sempre aperto tra il server e ogni client

Nota bene: Non confondere WebSocket con AJAX!

AJAX consente al client e al server di scambiare informazioni senza ricaricare la pagina. Tuttavia, in AJAX, è sempre il client che chiede e il server che risponde. Il server non può decidere da solo di inviare informazioni al client. Con WebSocket è diventato possibile!

Socket.io ci permette di utilizzare WebSockets molto facilmente. E, dato che non tutti i browser supportano i recenti WebSockets, è anche in grado di usare vecchie tecniche di comunicazione sincronizzate in caso di necessità.

Ssocket.io determina quale metodo di comunicazione real-time è più adatto ad ogni cliente:

  1. WebSocket
  2. Adobe Flash Socket
  3. AJAX long polling
  4. AJAX multipart streaming
  5. Forever Iframe
  6. JSONP Polling

Ad esempio, se il browser non supporta WebSocket ma Flash è installato, socket.io passerà attraverso Flash per comunicare in tempo reale! In caso contrario, potrà utilizzare altre tecniche come AJAX Long Polling (il client chiede continuamente al server se ci sono aggiornamenti, non il metodo più pulito o più efficiente, ma funziona) o “Forever Iframe” che si basa su un iframe invisibile che si carica progressivamente per recuperare gli aggiornamenti dal server.

La buona notizia è che non è necessario conoscere i dettagli su come funzionano queste tecniche. Tuttavia, penso che sia bene almeno conoscere il loro nome e che esistano.

Grazie a tutte queste diverse tecniche socket.io supporta un gran numero di browser, anche vecchi:

  • Internet Explorer 5.5+ (si, hai letto bene!).
  • Safari 3+
  • Google Chrome 4+
  • Firefox 3+
  • Opera 10.61+
  • Safari per iPhone e iPad
  • Il browser Android

Ora che sappiamo un po’ di più su come funziona Socket.io.

Possiamo iniziare ad usarlo?

Nel prossimo tutorial andremo a creare la nostra prima applicazione real-time con Socket.io e Node.js!


L’articolo che hai appena letto fa parte di una lunga serie di guide e tutorial tradotte in italiano e distribuite gratuitamente. In particolare questo articolo si basa sui testi inglesi di Mathieu Nebra (Ultra fast applications using Node.js), con licenza CC BY-NC-SA. Questo articolo è sotto la stessa licenza.