Server-Sent Events en Kotlin : comment rendre le streaming de données simple et rapide

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

Oubliez le polling éternel : découvrez les Server-Sent Events en Kotlin

\n\n

Imaginez : vous ouvrez un terminal boursier et les cotations se mettent à jour toutes seules. Ou vous accédez à l'interface d'administration d'un site et vous voyez un flux en direct du nombre d'utilisateurs en ligne. Plus de boutons « Actualiser », plus de requêtes interminables au serveur. Juste un flux de données qui arrive en temps réel.

\n\n

Dans le monde du développement web, ce sont les Server-Sent Events (SSE) qui s'en chargent — un protocole qui permet au serveur d'envoyer lui-même des données au client via une seule connexion HTTP. Et aujourd'hui, je vais vous montrer comment implémenter les SSE en Kotlin avec le framework Ktor. Ce ne sera pas de la théorie aride, mais un exemple de travail complet, du serveur au client.

\n\n

Que sont les Server-Sent Events et pourquoi est-ce génial ?

\n\n

Il y a longtemps, pour obtenir des données fraîches, les développeurs utilisaient le polling (interrogation). Le client contactait le serveur toutes les N secondes : « Alors, des nouvelles ? ». Le serveur répondait : « Non ». Et ainsi de suite. C'est terriblement inefficace : 99 % des requêtes sont vides, et le serveur gaspille des ressources à traiter des connexions inutiles.

\n\n

Les SSE résolvent le problème radicalement : le client ouvre une seule connexion, et le serveur envoie lui-même les données dès qu'elles apparaissent. C'est comme un abonnement à des actualités : vous attendez simplement, et on vous apporte le dernier numéro.

\n\n

Avantages des Server-Sent Events en Kotlin :

\n
    \n
  • Simplicité — fonctionne sur du HTTP standard, ne nécessite pas de bibliothèques supplémentaires côté client (à part l'EventSource intégré au navigateur).
  • \n
  • Reconnexion automatique — si la connexion est interrompue, le navigateur se reconnecte tout seul.
  • \n
  • Économie de ressources — une seule connexion au lieu de dizaines.
  • \n
  • Support natif en Kotlin — avec Ktor et les coroutines, écrire un serveur SSE est un vrai plaisir.
  • \n
\n\n

Le principal inconvénient ? Les SSE sont un canal unidirectionnel (uniquement du serveur vers le client). Si vous avez besoin de communiquer dans les deux sens, tournez-vous vers WebSocket. Mais pour les notifications, les flux d'actualités, les cotations, la surveillance — les SSE sont idéaux.

\n\n

Quand utiliser les SSE dans votre projet Kotlin ?

\n\n
    \n
  • Flux de notifications — nouveaux messages, commentaires, likes.
  • \n
  • Surveillance et logs — streaming des logs du serveur en temps réel.
  • \n
  • Données boursières — mise à jour des taux de change, actions, crypto-monnaies.
  • \n
  • Progression des tâches — rapport d'avancement du téléchargement d'un fichier ou du traitement de données.
  • \n
  • Systèmes d'alerte — signaux d'urgence, statuts des appareils.
  • \n
\n\n

Si vous cherchez un moyen de transmettre des mises à jour du serveur au client sans prise de tête — SSE Kotlin est votre choix. Passons au code.

\n\n

Configuration du projet : Ktor + SSE

\n\n

Pour commencer, créons un nouveau projet Ktor. J'utiliserai Gradle Kotlin DSL. Dans build.gradle.kts, ajoutons les dépendances :

\n\n
val ktor_version = "2.3.7"\n\ndependencies {\n    implementation("io.ktor:ktor-server-core:$ktor_version")\n    implementation("io.ktor:ktor-server-netty:$ktor_version")\n    implementation("io.ktor:ktor-server-content-negotiation:$ktor_version")\n    implementation("io.ktor:ktor-serialization-kotlinx-json:$ktor_version")\n    implementation("ch.qos.logback:logback-classic:1.4.14")\n    implementation("io.ktor:ktor-server-cors:$ktor_version")\n}
\n\n

Notez : pour les SSE, nous n'avons pas besoin de bibliothèque séparée — Ktor prend en charge la transmission de données en streaming nativement via les coroutines.

\n\n

Création d'un endpoint SSE

\n\n

Passons maintenant à la partie la plus intéressante : écrivons un serveur qui enverra des événements au client toutes les 2 secondes. Ce sera une simulation de cotations boursières.

\n\n
import io.ktor.server.application.*\nimport io.ktor.server.engine.*\nimport io.ktor.server.netty.*\nimport io.ktor.server.response.*\nimport io.ktor.server.routing.*\nimport kotlinx.co                

Blogs

Book Recommendations