0 XP
?
Intermédiaire40 min30 XP

Objectifs de cette leçon

  • Comprendre les WebSockets vs HTTP
  • Configurer Socket.IO
  • Envoyer et recevoir des messages en temps réel

WebSockets : chat en temps réel 💬

Qu'est-ce qu'un WebSocket ?

Contrairement à HTTP (requete/réponse), les WebSockets maintiennent une connexion permanente entre le client et le serveur.

HTTPWebSocket
Client envoie → Serveur répondBidirectionnel
Chaque requête = nouvelle connexionConnexion unique maintenue
Adapté pour les CRUDAdapté pour le temps réel

Installation

npm install socket.io

Serveur WebSocket

// server.js
import { createServer } from 'node:http';
import { Server } from 'socket.io';

const httpServer = createServer();
const io = new Server(httpServer, {
  cors: { origin: '*' }
});

io.on('connection', (socket) => {
  console.log(`Utilisateur connecté : ${socket.id}`);

  socket.on('chat:message', (msg) => {
    io.emit('chat:message', {
      id: socket.id,
      text: msg,
      time: new Date().toLocaleTimeString()
    });
  });

  socket.on('disconnect', () => {
    console.log(`Utilisateur déconnecté : ${socket.id}`);
  });
});

httpServer.listen(3000, () => {
  console.log('Serveur WebSocket sur http://localhost:3000');
});

Client HTML + Socket.io

<!DOCTYPE html>
<html>
<head><title>Chat</title></head>
<body>
  <h1>Chat en temps réel</h1>
  <ul id="messages"></ul>
  <input id="input" placeholder="Écrire un message..." />
  <button onclick="envoyer()">Envoyer</button>
  <script src="/socket.io/socket.io.js"></script>
  <script>
    const socket = io();
    const input = document.getElementById('input');
    const messages = document.getElementById('messages');

    socket.on('chat:message', (data) => {
      const li = document.createElement('li');
      li.textContent = `[${data.time}] ${data.text}`;
      messages.appendChild(li);
    });

    function envoyer() {
      if (input.value.trim()) {
        socket.emit('chat:message', input.value);
        input.value = '';
      }
    }
  </script>
</body>
</html>

Événements Socket.io

ÉvénementDescription
connectionNouveau client connecté
disconnectClient déconnecté
socket.emit()Envoyer un message au serveur
io.emit()Envoyer à TOUS les clients
socket.to(id).emit()Envoyer à un client spécifique

Salles (Rooms)

socket.join('général');
io.to('général').emit('message', 'Bonjour tous !');

Exercices 🎯

  1. Ajoute un champ "pseudo" avant de pouvoir envoyer des messages
  2. Crée un système de salles : l'utilisateur choisit sa salle avant d'entrer
  3. Affiche la liste des utilisateurs connectés en temps réel

⚡ Simulateur — WebSockets

Étape 1/6
📝 Pseudo-code
1const io = require("socket.io")(server);
2io.on("connection", (socket) => {
3 socket.on("message", (msg) => {
4 io.emit("message", msg);
5 });
6});
⚙️ Exécution
📦 Mémoire
Aucune variable
🔀 Flux d'exécution
socket.io(server)
3
Initialisation de Socket.IO

require("socket.io") initialise Socket.IO sur le serveur HTTP existant. Il gère les connexions WebSocket en temps réel.