Server-Sent Events in Kotlin: So machen Sie Daten-Streaming einfach und schnell

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Vergessen Sie das ewige Polling: Lernen Sie Server-Sent Events in Kotlin kennen

\n\n

Stellen Sie sich vor: Sie öffnen ein Börsenterminal und die Kurse aktualisieren sich von selbst. Oder Sie gehen in das Admin-Panel einer Website und sehen dort einen Live-Feed der Anzahl der Online-Benutzer. Keine "Aktualisieren"-Buttons, keine endlosen Anfragen an den Server. Einfach ein Datenstrom, der in Echtzeit fließt.

\n\n

In der Welt der Webentwicklung sind dafür Server-Sent Events (SSE) zuständig – ein Protokoll, das es dem Server ermöglicht, Daten eigenständig über eine einzige HTTP-Verbindung an den Client zu senden. Und heute zeige ich Ihnen, wie Sie SSE in Kotlin mit dem Framework Ktor implementieren. Das wird keine trockene Theorie, sondern ein vollständiges, funktionierendes Beispiel vom Server bis zum Client.

\n\n

Was sind Server-Sent Events und warum sind sie großartig?

\n\n

Früher, um aktuelle Daten zu erhalten, nutzten Entwickler Polling (Abfragen). Der Client fragte alle N Sekunden beim Server an: "Na, gibt es Neuigkeiten?". Der Server antwortete: "Nein". Und so weiter im Kreis. Das ist wahnsinnig ineffizient: 99% der Anfragen sind leer, und der Server verschwendet Ressourcen für die Verarbeitung unnötiger Verbindungen.

\n\n

SSE löst das Problem grundlegend: Der Client öffnet eine einzige Verbindung, und der Server sendet die Daten selbst, sobald sie anfallen. Es ist wie ein Nachrichten-Abo – Sie warten einfach, und man bringt Ihnen die aktuelle Ausgabe.

\n\n

Vorteile von Server-Sent Events in Kotlin:

\n
    \n
  • Einfachheit – funktioniert über normales HTTP, benötigt keine zusätzlichen Bibliotheken auf Client-Seite (außer dem integrierten EventSource im Browser).
  • \n
  • Automatische Wiederherstellung – wenn die Verbindung abbricht, stellt der Browser sie selbstständig wieder her.
  • \n
  • Ressourcenschonend – eine Verbindung statt dutzender.
  • \n
  • Native Unterstützung in Kotlin – mit Ktor und Coroutines macht das Schreiben eines SSE-Servers richtig Spaß.
  • \n
\n\n

Der größte Nachteil? SSE ist ein unidirektionaler Kanal (nur vom Server zum Client). Wenn Sie bidirektionale Kommunikation benötigen, schauen Sie sich WebSocket an. Aber für Benachrichtigungen, Newsfeeds, Kurse, Monitoring – SSE ist ideal.

\n\n

Wann sollten Sie SSE in Ihrem Kotlin-Projekt einsetzen?

\n\n
    \n
  • Benachrichtigungs-Feed – neue Nachrichten, Kommentare, Likes.
  • \n
  • Monitoring und Logs – Streaming von Server-Logs in Echtzeit.
  • \n
  • Börsendaten – Aktualisierung von Wechselkursen, Aktien, Kryptowährungen.
  • \n
  • Fortschritt von Aufgaben – Bericht über Dateiupload oder Datenverarbeitung.
  • \n
  • Alarmsysteme – Notfallsignale, Gerätestatus.
  • \n
\n\n

Wenn Sie nach einer Möglichkeit suchen, Updates vom Server zum Client ohne Kopfschmerzen zu übertragen – SSE Kotlin ist Ihre Wahl. Kommen wir zum Code.

\n\n

Projekt-Setup: Ktor + SSE

\n\n

Zunächst erstellen wir ein neues Ktor-Projekt. Ich verwende Gradle Kotlin DSL. In build.gradle.kts fügen wir die Abhängigkeiten hinzu:

\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

Beachten Sie: Für SSE benötigen wir keine separate Bibliothek – Ktor unterstützt die Datenstromübertragung standardmäßig über Coroutines.

\n\n

SSE-Endpunkt erstellen

\n\n

Jetzt kommt der spannende Teil – wir schreiben einen Server, der alle 2 Sekunden Ereignisse an den Client sendet. Dies simuliert Börsenkurse.

\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

Buchempfehlungen