Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Un'app in tempo reale con Node.js, Express e Socket.IO

Come realizzare un'app in tempo reale (chat) con Node.js, Express, Socket.IO, poche righe di codice e la potenza di WebSocket
Come realizzare un'app in tempo reale (chat) con Node.js, Express, Socket.IO, poche righe di codice e la potenza di WebSocket
Link copiato negli appunti

Le applicazioni moderne sono sempre più dinamiche e reattive. Pensiamo a chat, dashboard live, giochi multiplayer o sistemi di notifica in tempo reale. In tutti questi casi, serve una tecnologia che permetta la comunicazione immediata tra client e server senza dover ricaricare la pagina web.

Per questo scopo, Node.js, Express e Socket.IO formano una combinazione perfetta. Sono semplici da usare, altamente performanti e basate su JavaScript, il linguaggio del web. In questa guida ti mostrerò come realizzare una chat in tempo reale, partendo da zero e spiegandoti ogni passaggio con il codice commentato.

Cosa useremo per creare la nostra app in tempo reale

  • Node.js
  • Express.js: framework leggero per la creazione di API e server HTTP.
  • Socket.IO: libreria che permette la comunicazione bidirezionale in tempo reale tramite WebSocket

Creazione del progetto

Per prima cosa, installa Node.js se non lo hai già. Ora apri il terminale e crea una nuova cartella:

mkdir chat-app
cd chat-app
npm init -y

Installiamo poiExpress e Socket.IO:

npm install express socket.io

Struttura del progetto

Creiamo la seguente struttura:

chat-app/
├── public/
│   └── index.html
├── server.js
├── package.json

Il server con Node.js, Express e Socket.IO

Nel file server.js, scriviamo il seguente codice:

// server.js
const express = require("express");
const app = express();
const http = require("http").createServer(app); // Server HTTP
const io = require("socket.io")(http); // Socket.IO legato al server HTTP

// Serviamo i file statici dalla cartella "public"
app.use(express.static("public"));
// Route principale
app.get("/", (req, res) => {
  res.sendFile(__dirname + "/public/index.html");
});

// Quando un client si connette
io.on("connection", (socket) => {
  console.log("Un utente si è connesso");
  // Ricezione del messaggio dal client
  socket.on("chat message", (msg) => {
    io.emit("chat message", msg); // Invia a tutti i client
  });

  // Quando un client si disconnette
  socket.on("disconnect", () => {
    console.log("Utente disconnesso");
  });
});
// Avvio del server sulla porta 3000
http.listen(3000, () => {
  console.log("Server avviato su http://localhost:3000");
});

In esso:

  • Express serve la nostra pagina web.
  • Socket.IO crea una connessione WebSocket tra client e server.
  • Quando un utente invia un messaggio (chat message
  • Quando un utente si collega o si disconnette, il server lo registra nella console.
  • La parte client: HTML + JavaScript

    Ora creiamo public/index.html, la nostra semplice interfaccia di chat.

    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>Chat Realtime</title>
      <style>
        body {
          font-family: Arial, sans-serif;
          margin: 0;
          padding: 0;
        }
        ul {
          list-style: none;
          padding: 0;
          margin: 0;
        }
        li {
          padding: 10px;
          border-bottom: 1px solid #eee;
        }
        form {
          position: fixed;
          bottom: 0;
          width: 100%;
          background: #fff;
          display: flex;
        }
        input {
          flex: 1;
          padding: 10px;
          border: none;
          border-top: 1px solid #eee;
        }
        button {
          padding: 10px;
          border: none;
          background: #4CAF50;
          color: white;
        }
      </style>
    </head>
    <body>
    
      <ul id="messages"></ul>
      <form id="form">
        <input id="input" autocomplete="off" placeholder="Scrivi un messaggio..." />
        <button>Invia</button>
      </form>
    
      <script src="/socket.io/socket.io.js"></script>
      <script>
        const socket = io();
        const form = document.getElementById('form');
        const input = document.getElementById('input');
        const messages = document.getElementById('messages');
    
        form.addEventListener('submit', (e) => {
          e.preventDefault();
          if (input.value) {
            socket.emit('chat message', input.value); // Invio al server
            input.value = '';
          }
        });
        socket.on('chat message', (msg) => {
          const item = document.createElement('li');
          item.textContent = msg;
          messages.appendChild(item);
          window.scrollTo(0, document.body.scrollHeight);
        });
      </script>
    
    </body>
    </html>

    • Quando premi "Invia", il messaggio viene inviato al server con socket.emit('chat message', ...)
    • Il server lo riceve e lo trasmette a tutti i client.
    • Ogni client, ricevendo l'evento chat message

    Esecuzione e test

    Avvia il server con:

    node server.js

    Apri il browser su http://localhost:3000, magari in due finestre diverse. Scrivi un messaggio e vedrai apparire il testo su entrambi gli schermi in tempo reale.

    Come funziona la comunicazione in tempo reale

    Il cuore del sistema è WebSocket, un protocollo che consente la connessione persistente tra client e server. A differenza delle richieste HTTP classiche, che sono "una tantum", WebSocket mantiene aperta una comunicazione bidirezionale costante. Socket.IO semplifica l'utilizzo di WebSocket e offre funzionalità aggiuntive, come:

    • Fallback automatico se WebSocket non è supportato.
    • Eventi personalizzati.
    • Autenticazione.
    • Broadcast e stanze.
    • Sicurezza e produzione

      Questa è una demo base, ma per andare in produzione è importante sanitizzare i messaggi. Evita quindiscript malevoli nel testo:

      function sanitize(input) {
        return input.replace(//g, ">");
      }

      In produzione, usa HTTPS per proteggere la connessione. Aggiungi sistemi di throttling o CAPTCHA per limitare invii ripetuti e ricordati che puoi associare ogni socket.id ad un utente con nome e autenticazione.

      Possibili estensioni dell'app in tempo reale

      Hai una base solida per costruire qualcosa di molto più grande. Ecco qualche idea:

      • Aggiunta del nome utente.
      • Chat di gruppo con stanze.
      • Notifiche visive o sonore.
      • Cronologia dei messaggi con database.
      • Emoji e allegati.
      • Conclusione

        In questa guida hai visto quanto sia semplice realizzare un'app in tempo reale con Node.js, Express e Socket.IO. Con poche righe di codice e la potenza di WebSocket, puoi creare un'app moderna, reattiva e funzionale. Hai imparato a:

        • Strutturare il progetto.
        • Configurare il server.
        • Collegare client e server tramite eventi personalizzati.
        • Come visualizzare i messaggi in tempo reale.

        Questa chat è un punto di partenza. Da qui puoi esplorare infinite direzioni: aggiungere funzionalità complesse, integrare un database, rendere l'app mobile-friendly o trasformarla in un sistema collaborativo completo. L'aspetto più interessante? Hai usato JavaScript da cima a fondo, client e server parlano la stessa lingua. Questo rende lo sviluppo fluido, coerente e veloce.

        Buon hacking!

Ti consigliamo anche