WebSockets : gardez la conversation ouverte
Échangez des données en temps réel entre le client et le serveur, sans rouvrir la connexion.
Où en êtes-vous avec cette notion ?
Une indication personnelle, enregistrée uniquement dans ce navigateur.
À lire ensuite
Le format café
L’essentiel à comprendre, le temps d’un café.
Envie de creuser ? Un cours plus complet vous attend juste après, à déplier sans quitter cette page.
Une conversation, plutôt qu’une boîte aux lettres
Imaginez un chat où chaque nouveau message arrive sans rafraîchir la page. Avec du polling, le navigateur demanderait régulièrement : « Du nouveau ? ». Avec WebSocket, un canal reste ouvert : le client et le serveur peuvent parler lorsqu’ils en ont besoin.
Le mécanisme en trois étapes
- Le navigateur demande une connexion au serveur.
- Une fois le canal ouvert, chacun peut envoyer des messages dans les deux sens.
- Le canal se ferme lorsque l’un des participants s’arrête ou que le réseau coupe.
C’est utile pour un chat, un jeu partagé ou un outil collaboratif. Pour simplement recevoir des notifications du serveur, les Server-Sent Events peuvent suffire. WebSocket ne remplace donc pas toutes les requêtes HTTP.
Un exemple à lire
// Adresse illustrative : nécessite votre propre serveur.
const socket = new WebSocket('wss://example.com/live');
socket.addEventListener('message', (event) => {
console.log('Message reçu :', event.data);
});
wss:// désigne une connexion chiffrée. Ce petit exemple reçoit des données ; une application réelle doit aussi les valider et gérer les déconnexions.
Fiche mémo
- Persistant : on garde le canal ouvert.
- Bidirectionnel : les deux côtés peuvent envoyer.
- Pas infaillible : après une coupure, il faut retrouver un état cohérent.
L’idée à emporter : choisissez WebSocket quand votre application a besoin d’une conversation, pas seulement d’une réponse.
Et si on allait plus loin ?
Le café vous a donné les repères. Prenez maintenant le temps de comprendre les mécanismes et de pratiquer, si vous le souhaitez.
Aller plus loinConcevoir un échange temps réel qui résiste aux coupuresDévelopper le coursReplier le cours
Ce que vous saurez faire
Distinguer transport et protocole métier, contrôler les messages reçus et prévoir le retour après une interruption. Une connexion ouverte ne suffit pas à garantir un état correct.
1. Donner un contrat aux messages
WebSocket transporte des données ; votre application leur donne un sens. Pour notre tableau de mesures fictif, choisissons un objet avec un type, une valeur et un numéro de séquence. Ce contrat doit être partagé avec le serveur.
// Exemple : nécessite votre propre serveur compatible.
const socket = new WebSocket('wss://example.com/metrics');
socket.addEventListener('message', ({ data }) => {
if (typeof data !== 'string') return;
try {
const message = JSON.parse(data);
if (
message?.type !== 'measurement' ||
!Number.isFinite(message.value) ||
!Number.isSafeInteger(message.sequence)
) return;
console.log(message.sequence, message.value);
} catch {
console.warn('Message non conforme');
}
});
Ce code ignore les messages binaires et les objets inattendus. Il ne constitue pas un client complet. Avant un envoi, vérifiez aussi que readyState vaut WebSocket.OPEN. bufferedAmount renseigne sur les octets en attente d’envoi ; il ne prouve pas que le destinataire les a traités. L’API classique ne fournit pas de régulation automatique du flux entrant.
Référence : API WebSocket.
2. Penser la reconnexion comme un retour à la réalité
Le protocole prévoit une fermeture de connexion, mais pas la sauvegarde de vos événements métier. Une interruption impose donc une stratégie applicative. Dans notre exemple, conservons le dernier numéro reçu et demandons au serveur les événements suivants. Si son historique ne suffit plus, rechargeons un état complet.
Évitez une reconnexion immédiate en boucle. Un délai croissant avec une part aléatoire répartit les tentatives. Après une déconnexion volontaire, ne relancez pas la connexion. Chaque nouvelle socket doit également nettoyer les écouteurs et temporisateurs devenus inutiles.
3. Séparer accès et connexion
Le chiffrement wss:// protège le transport, pas les règles métier. Un canal établi n’autorise pas automatiquement l’accès à tous les salons. Le serveur doit contrôler l’identité, les abonnements et les actions sensibles, et borner les messages acceptés.
Référence : protocole WebSocket.
À vous de jouer
Le tableau a reçu la mesure 41, perd la connexion, puis reçoit la 45. Peut-il simplement afficher 45 et continuer ?
Correction commentée
Cela dépend du contrat. Si chaque mesure remplace intégralement l’état affiché, 45 peut suffire. Si les événements sont des variations à additionner, les événements manquants faussent le total. Notre protocole doit alors rejouer 42 à 44 ou fournir un nouvel état complet. Un test de coupure révèle cette différence bien mieux qu’une démonstration sur un réseau stable.
Vous pouvez aussi vous arrêter ici. L’approfondissement est facultatif.
Les repères Cours Café
Pour aller à la source
Documentation de référence. Vérification éditoriale encore à effectuer.
Gardez une trace de cette idée.
Favoris, notes et progression seront disponibles après connexion du stockage distant.