SSE : le serveur vous tient au courant
Recevez un flux d’événements sans construire un protocole bidirectionnel.
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.
Un flux dans un seul sens
Server-Sent Events permet à un serveur d’envoyer des événements texte à un navigateur via une réponse HTTP maintenue ouverte. Le navigateur utilise EventSource.
const stream = new EventSource('/events');
stream.onmessage = (event) => console.log(event.data);
// À la fin du besoin :
// stream.close();
Le bon cas d’usage
Suivi de tâches, notifications et tableaux de bord où le navigateur reçoit surtout des mises à jour. Les actions du client peuvent continuer à utiliser des requêtes HTTP classiques.
À surveiller
Les proxys peuvent bufferiser le flux. Testez les déconnexions et le comportement du serveur. La reconnexion du navigateur ne garantit pas à elle seule l’absence de pertes : prévoyez des identifiants et une reprise adaptée.
Fiche mémo
SSE : texte, serveur vers client, HTTP. WebSocket : messages dans les deux sens.
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 loinConstruire un flux reprenable avec EventSourceDévelopper le coursReplier le cours
Ce que vous saurez faire
Lire un événement SSE, distinguer reconnexion et reprise métier, puis prévoir le nettoyage du client. Un flux texte simple peut suffire à un suivi de tâche.
1. Le serveur envoie des événements délimités
La réponse utilise le type text/event-stream et reste ouverte. Chaque événement se termine par une ligne vide. Voici un événement que votre serveur de test pourrait émettre :
id: 17
event: progress
data: {"percent":60}
La ligne vide finale délimite l’événement. event choisit son nom ; data contient le texte à interpréter. Plusieurs lignes data d’un même événement sont réunies avec des sauts de ligne. Un commentaire commençant par : peut entretenir l’activité du flux, sans devenir un événement métier.
// Nécessite un serveur SSE exposant /events.
const stream = new EventSource('/events');
stream.addEventListener('progress', (event) => {
try {
const payload = JSON.parse(event.data);
if (!Number.isFinite(payload?.percent) ||
payload.percent < 0 || payload.percent > 100) return;
console.log('Progression :', payload.percent);
} catch {
console.warn('Événement ignoré');
}
});
// Quand l’écran n’a plus besoin du flux : stream.close();
Un événement nommé progress demande cet écouteur spécifique ; onmessage vise les événements sans nom personnalisé.
Référence : utiliser SSE.
2. Un identifiant ne recrée pas les événements perdus
Lors d’une reconnexion automatique, EventSource peut transmettre le dernier identifiant dans Last-Event-ID. Le serveur doit savoir quoi en faire : conserver un historique, retrouver la position et reprendre après elle. Sans cette logique, l’identifiant n’offre pas de garantie de rattrapage.
Si l’historique a expiré, définissez une réponse applicative explicite : par exemple un événement invitant le client à recharger l’état complet. Définissez aussi la gestion des doublons. Afficher « 60 % » deux fois ne pose pas le même problème qu’ajouter deux fois une ligne dans un journal.
Testez le chemin réel via votre proxy : une réponse peut être mise en tampon et arriver par paquets au lieu d’être diffusée immédiatement.
Référence : EventSource et reconnexion.
À vous de jouer
Le dernier identifiant reçu est 17, mais le serveur ne conserve plus que les événements 25 à 40. Peut-il garantir une reprise complète en envoyant 25 ?
Correction commentée
Non : les événements 18 à 24 manquent. Il faut recharger un état de référence ou indiquer explicitement la lacune. La reconnexion du transport fonctionne, mais la continuité des données n’est pas assurée automatiquement.
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.