Que sont les WebSockets ?

Mis à jour : septembre 2026

Un WebSocket est une connexion persistante et bidirectionnelle entre client et serveur : chaque côté peut pousser un message à l’instant où il survient. HTTP a bâti le web en demandant ; les WebSockets l’ont rendu vivant en écoutant — un upgrade normalisé (RFC 6455) transforme une requête en canal ouvert, et tout ce qui est temps réel sur le web — chat, présence, tickers, curseurs collaboratifs — circule dessus.

Points clés

QuestionRéponse
Ce que c’estUne connexion persistante et full-duplex — push du serveur, envoi du client, le même tuyau
vs. HTTPRequest-response sans état vs. canal ouvert avec état
Le handshakeGET HTTP + Upgrade → 101 Switching Protocols → frames
Les règles de productionToujours wss://, heartbeats + reconnexion avec backoff, planifier le fan-out
La couche supérieureLa synchronisation temps réel — des requêtes et de l’état sur le socket, pas des messages bruts

Comment fonctionne le handshake d’upgrade WebSocket (HTTP 101)

GET /chat HTTP/1.1                      ← commence comme du HTTP ordinaire
Host: example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==

HTTP/1.1 101 Switching Protocols        ← et cesse d'être du HTTP ici
Upgrade: websocket
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=

# Désormais : de minuscules frames (2–14 octets d'overhead), dans les deux sens,
# vs ~500+ octets de headers pour chaque poll HTTP individuel.

La plupart des applications ne devraient pas écrire à la main ce qui vient ensuite — l’idiome de production est une couche temps réel gérée où le socket, les heartbeats et la reconnexion sont le code de quelqu’un d’autre :

// JavaScript / Node.js — Back4app JS SDK (Live Query over WebSockets)
// One WebSocket, managed for you: connect, subscribe, reconnect
const query = new Parse.Query('Message');
query.equalTo('room', 'general');

const subscription = await query.subscribe();  // wss:// under the hood
subscription.on('create', (msg) => appendToChat(msg));
subscription.on('open', () => setStatus('live'));
// Later: subscription.unsubscribe();

WebSockets vs. tout le reste qui déplace des données

TransportDirectionFonctionnementIdéal pour
PollingLe client demande en boucleUne requête complète par vérificationRepli legacy uniquement
Long pollingLe client demande, le serveur temporiseUne requête en attente par messageRepli de compatibilité
SSEServeur → client seulementHTTP en streaming, reconnexion autoFlux, tickers, notifications
WebSocketLes deux sensTCP persistant après upgradeChat, jeux, collaboration, sync
WebRTCPair ↔ pairCanaux UDP média/donnéesAppels, vidéo — signalisés via WebSockets
Le polling HTTP face à une connexion WebSocketAvec le polling, le client envoie sans cesse des requêtes HTTP complètes qui ne rapportent le plus souvent rien de nouveau ; avec un WebSocket, une seule connexion mise à niveau reste ouverte et le serveur pousse chaque message à l'instant où il survient.

WebSocket

un canal ouvert
des messages dans les deux sens, instantanément

Client

Serveur

Polling

requête #1 …vide

requête #2 …vide

requête #3 …message !

Client

Serveur

Avec le polling, le client envoie sans cesse des requêtes HTTP complètes qui ne rapportent le plus souvent rien de nouveau ; avec un WebSocket, une seule connexion mise à niveau reste ouverte et le serveur pousse chaque message à l'instant où il survient.

Exploiter des sockets en production

Quatre concepts portent la charge opérationnelle. Affinité de session : les connexions ont un état, donc les load balancers doivent maintenir chaque client épinglé à son nœud. Fan-out : diffuser un message à dix mille abonnés répartis sur de nombreux nœuds exige un backplane pub/sub entre serveurs — le message voyage de serveur à serveur avant de voyager de serveur à client. Backpressure : on ne peut pas laisser un téléphone lent sur un mauvais réseau accumuler des messages sans limite dans la mémoire de votre serveur ; il faut jeter, fusionner ou déconnecter. Vivacité : les frames ping/pong et les heartbeats applicatifs détectent les connexions à moitié mortes, et les clients se reconnectent avec un backoff exponentiel et du jitter, puis se réabonnent à leur état — l’étape que les implémentations naïves oublient. Rien de tout cela n’est exotique ; tout cela explique pourquoi « on va juste ouvrir un socket » devient une décision de plateforme.

Des messages à la synchronisation : la couche du dessus

Les WebSockets bruts déplacent des octets ; les applications veulent de l’état. L’étage au-dessus, c’est la synchronisation temps réel : au lieu d’inventer à la main des types de messages et une comptabilité côté client, vous vous abonnez à des données — une requête, un document, un canal — et la couche livre des événements de changement précis, gère la reconnexion avec rattrapage et applique les permissions côté serveur par abonné. C’est le modèle des live queries : les WebSockets comme transport, un moteur de requêtes comme cerveau. Si votre code WebSocket accumule des switch sur des types de messages, vous êtes en train de reconstruire cette couche à la main.

Cas d’usage courants

  • Chat et messagerie — le cas canonique : les deux côtés parlent, instantanément.
  • Présence — qui est en ligne, qui est en train d’écrire : de minuscules messages, à haute fréquence, dans les deux sens.
  • Édition collaborative — documents et tableaux blancs partagés, où les positions de curseur et les modifications circulent en continu.
  • Dashboards en direct et tickers — push serveur de chiffres qui bougent ; SSE convient aussi quand c’est à sens unique.
  • Multijoueur et géolocalisation — état de jeu et marqueurs de carte en mouvement, là où la latence est le produit.

Avez-vous besoin d’un socket ? Matrice de décision

Choisissez les WebSockets quand…Le HTTP ordinaire est le bon choix quand…
Les utilisateurs regardent des données qui changent maintenantLes données changent rarement ou à la demande
Les deux côtés initient des messagesSeul le client demande
La latence est visible par l’utilisateur (chat, jeux)Un poll de 30 secondes suffirait honnêtement
Beaucoup de petits messages circulent en permanenceLes réponses sont volumineuses et cachables
Vous allez exploiter (ou louer) le fan-outPersonne n’est propriétaire de l’exploitation des sockets

Et la voie médiane que la matrice cache : les cas serveur-vers-client uniquement (flux, notifications) conviennent à SSE avec moins de machinerie — la comparaison complète des transports a sa propre entrée dans le registre de ce glossaire.

Limites et trade-offs

  • L’état est le prix du push. Chaque connexion ouverte est de la mémoire serveur et une contrainte de répartition de charge ; l’absence d’état de HTTP portait plus de poids qu’il n’y paraissait.
  • Les réseaux détestent les connexions de longue durée. Proxies, radios mobiles et portables qu’on referme coupent des sockets en permanence — la logique de reconnexion n’est pas un cas limite, c’est la boucle principale.
  • La sécurité déménage vers la connexion. Authentifiez à la connexion, validez chaque message, appliquez l’autorisation par abonnement — et toujours wss.
  • Le cache n’existe pas ici. Tout ce qui est poussé est calculé et livré par client ; le CDN ne peut rien pour vous.
  • La synchronisation écrite à la main est un piège. L’écart entre « j’ai ouvert un socket » et « une synchronisation d’état correcte, avec reconnexion et permissions » est là où vit la vraie ingénierie — c’est précisément la couche qui vaut la peine d’être louée.

WebSockets sur Back4app

Back4app est une plateforme open-source de Backend as a Service (BaaS) qui combine une base de données gérée, des API REST et GraphQL générées automatiquement, l’authentification, le stockage de fichiers et des fonctions serverless avec Cloud Code. Sa couche temps réel est Live Query : le transport WebSocket, les heartbeats, la reconnexion et le fan-out multi-nœuds tournent comme une infrastructure gérée (avec le protocole ouvert LiveQuery en dessous), tandis que votre code s’abonne à des requêtes et reçoit des événements de changement typés — avec des ACL appliquées par abonné, pour que le temps réel ne contourne jamais le modèle de permissions. Les onglets de code ci-dessus sont toute l’histoire côté client.

Questions fréquentes

Qu'est-ce qu'un WebSocket en termes simples ?

Un appel téléphonique au lieu d'un échange de courrier. HTTP fonctionne en request-response — le client demande, le serveur répond, la ligne se ferme. Un WebSocket ouvre une connexion persistante sur laquelle les deux côtés peuvent envoyer des messages à tout moment, avec quelques octets de framing par message au lieu de headers complets. C'est le transport standard (RFC 6455) du chat, des données en direct et de la collaboration.

En quoi un WebSocket diffère-t-il de HTTP ?

La direction et la durée de vie. HTTP est sans état et initié par le client : chaque échange est une nouvelle requête avec des headers complets, et le serveur ne peut jamais parler en premier. Un WebSocket démarre comme une requête HTTP, fait un upgrade et devient un canal full-duplex avec état où le serveur pousse sans qu'on le lui demande — ce qui est tout l'intérêt dès que quelque chose change pendant que l'utilisateur regarde.

Comment fonctionne le handshake WebSocket ?

Il commence comme du HTTP poli : le client envoie un GET avec les headers Upgrade et Connection plus une Sec-WebSocket-Key aléatoire ; le serveur répond 101 Switching Protocols avec un hash d'acceptation dérivé de cette clé. À partir de cet instant, la connexion TCP cesse de parler HTTP et transporte de légers frames WebSocket dans les deux sens jusqu'à ce qu'un des côtés la ferme.

Quelle est la différence entre ws:// et wss:// ?

La même qu'entre http et https : wss fait passer la connexion sur TLS. Le trafic de production est toujours en wss — par respect de la confidentialité et, pragmatiquement, parce que les connexions chiffrées traversent les proxies et les middleboxes d'entreprise qui abîment les upgrades en clair. Il n'existe aucune raison légitime de livrer ws en production.

Quelle est la différence entre WebSockets et Server-Sent Events ?

La direction. SSE est à sens unique — le serveur diffuse vers le client sur du HTTP ordinaire, avec reconnexion automatique intégrée — idéal pour les flux, les tickers et les notifications. Les WebSockets sont bidirectionnels, pour tous les cas où le client parle aussi : chat, jeux, édition collaborative. SSE est plus simple là où il suffit ; les WebSockets sont l'outil général.

Comment fonctionnent les reconnexions et les heartbeats ?

Le protocole inclut des frames de contrôle ping/pong pour que chaque côté vérifie que l'autre est vivant ; les applications ajoutent des heartbeats par-dessus pour détecter les connexions à moitié mortes, puis se reconnectent avec un backoff exponentiel et du jitter avant de se réabonner à leur état. Les couches temps réel gérées prennent cette boucle en charge pour vous — le code WebSocket écrit à la main qui l'oublie fonctionne jusqu'au jour où les réseaux se comportent comme des réseaux.

Les WebSockets passent-ils à l'échelle ?

Oui, avec une mécanique différente de HTTP : les connexions ont un état, donc les load balancers ont besoin d'affinité de session ; diffuser vers de nombreux clients demande un backplane pub/sub pour que chaque nœud puisse faire le fan-out des messages ; et les consommateurs lents exigent une gestion de la backpressure pour qu'un client bloqué ne fasse pas gonfler la mémoire du serveur. Ce sont des problèmes résolus — dans une infrastructure que vous construisez ou que vous louez.

Quand ne faut-il PAS utiliser les WebSockets ?

Quand le request-response convient déjà : récupérer des ressources cachables, du CRUD standard, des mises à jour peu fréquentes. Une connexion persistante achète le push instantané et le paie en état — sans intérêt pour des données qui changent rarement. La règle empirique : si un polling toutes les 30 secondes suffirait honnêtement, passez-vous du socket.

Termes associés

À comparer avec

Lectures recommandées

Prêt à construire votre backend ?

Lancez votre projet sur Back4app en quelques minutes — base de données, authentification, API et Cloud Code inclus. Sans carte bancaire.

Écrit et révisé par Back4app Engineering, Back4app Engineering · Publié le 2026-09-10