Chapitre 1 · Leçon 1
Connexion persistante bidirectionnelle client-serveur
Section 1
Step 1
Une connexion WebSocket démarre par une requête HTTP normale, puis demande un upgrade vers le protocole WebSocket. La connexion reste ouverte, permettant l'échange bidirectionnel.
snippet.typescript
1/*
2 * WebSocket Handshake (HTTP → WS Upgrade)
3 *
4 * CLIENT → SERVEUR :
5 * GET /ws HTTP/1.1
6 * Host: api.usher.dev
7 * Upgrade: websocket
8 * Connection: Upgrade
9 * Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
10 * Sec-WebSocket-Version: 13
11 *
12 * SERVEUR → CLIENT :
13 * HTTP/1.1 101 Switching Protocols
14 * Upgrade: websocket
15 * Connection: Upgrade
16 * Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
17 *
18 * Après le 101 :
19 * - La connexion TCP reste ouverte indéfiniment
20 * - Messages WebSocket frames (binary ou text)
21 * - Ping/Pong heartbeat pour détecter les déconnexions
22 * - Fermeture avec Close frame (code + raison)
23 */
24
25// HTTP polling vs WebSocket — comparaison
26// HTTP Polling (toutes les 2s) :
27// → 30 requêtes/minute par client
28// → Headers + overhead à chaque requête
29// → Latence max = 2 secondes
30
31// WebSocket :
32// → 1 connexion persistante
33// → Latence = quelques ms
34// → Overhead minimal (frames binaires)
35// → Bidirectionnel : serveur peut push sans que le client demandeStep 2
Socket.io ajoute des fonctionnalités au-dessus de WebSocket : reconnexion automatique, salles, namespaces, et fallback HTTP long-polling si WebSocket n'est pas disponible.