Server-Sent Events en Java : comment envoyer des données en temps réel sans WebSocket

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Server-Sent Events en Java : quand WebSocket est excessif et HTTP insuffisant

\n\n

Avez-vous déjà réfléchi au fonctionnement des flux d'actualités sur Twitter, des notifications dans Telegram ou des résultats sportifs en direct ? Les données semblent arriver toutes seules, sans actualisation de la page. Le secret est simple : Server-Sent Events (SSE) — une technologie qui permet au serveur d'envoyer des données au client en temps réel via une connexion HTTP classique.

\n\n

Dans cet article, nous allons explorer les Server-Sent Events en Java. Vous apprendrez pourquoi SSE est souvent plus pratique que WebSocket, comment configurer un serveur avec l'API Java Servlet, et comment recevoir des événements côté client. Le code sera fonctionnel, le style vivant, et les exemples aussi proches que possible des cas réels.

\n\n

Que sont les Server-Sent Events et pourquoi en avez-vous besoin ?

\n\n

Les Server-Sent Events (SSE) sont une norme W3C qui permet au serveur de « pousser » des données vers le client via une seule connexion HTTP persistante. Le client s'abonne à un flux d'événements et le serveur envoie des messages au fur et à mesure de leur apparition.

\n\n

SSE est idéal pour :

\n
    \n
  • Notifications — nouveaux e-mails, messages, changements de statut.
  • \n
  • Flux d'actualités — publications, tweets, taux de change.
  • \n
  • Surveillance — journaux, métriques serveur, progression des tâches.
  • \n
  • Données en direct — cotations boursières, résultats sportifs, météo.
  • \n
\n\n

Contrairement à WebSocket, SSE fonctionne uniquement dans un sens (serveur → client), mais cela suffit pour la plupart des scénarios. De plus, SSE utilise HTTP standard, ne nécessite pas de ports supplémentaires et traverse facilement les proxies et pare-feux.

\n\n

Server-Sent Events vs WebSocket : que choisir ?

\n\n

Si vous avez seulement besoin d'envoyer des données du serveur au client (sans retour), choisissez SSE. C'est plus simple, plus léger et moins coûteux. WebSocket est justifié lorsque le client envoie également activement des données (par exemple, dans les chats ou les jeux en ligne).

\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
CritèreServer-Sent EventsWebSocket
DirectionServeur → ClientBidirectionnelle
ProtocoleHTTP/1.1, HTTP/2ws:// ou wss://
Reconnexion automatiqueOui (intégrée au navigateur)Non (à implémenter)
Complexité d'implémentationFaibleMoyenne/Élevée
Support des navigateursTous les navigateurs modernesTous les navigateurs modernes
\n\n

Pour le site éducatif PythonLib, nous avons choisi Java car c'est un langage fiable pour le développement serveur. C'est parti !

\n\n

Partie serveur : implémentation SSE en Java avec l'API Servlet

\n\n

Commençons par le serveur. La méthode la plus simple consiste à utiliser les Servlets Java standard. Nous devons :

\n
    \n
  • Définir l'en-tête Content-Type: text/event-stream.
  • \n
  • Désactiver la mise en cache (Cache-Control: no-cache).
  • \n
  • Maintenir la connexion ouverte.
  • \n
  • Envoyer les données au format data: ...\\n\\n.
  • \n
\n\n

Exemple 1 : Serveur SSE simple avec Java Servlet

\n\n

Créons une servlet qui envoie l'heure actuelle toutes les 5 secondes.

\n\n
import javax.servlet.ServletException;\nimport javax.servlet.annotation.WebServlet;\nimport javax.servlet.http.HttpServlet;\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpServletResponse;\nimport java.io.IOException;\nimport java.io.PrintWriter;\nimport java.time.LocalTime;\nimport java.util.concurrent.Executors;\nimport java.util.concurrent.ScheduledExecutorServ                

Blogs

Book Recommendations