WebSocket auf Kotlin: Entwicklung von Echtzeitanwendungen von Grund auf

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

Einleitung: Warum WebSocket und Kotlin das ideale Paar für Echtzeit sind



Moderne Webanwendungen erfordern zunehmend eine sofortige Datenübertragung: von Chats und Online-Spielen bis hin zu Börsenkursen und Überwachungssystemen. Traditionelles HTTP mit seinem Anfrage-Antwort-Modell ist für solche Aufgaben ineffizient – es verursacht Verzögerungen und übermäßigen Datenverkehr. Hier kommt WebSocket ins Spiel – ein Protokoll, das eine permanente bidirektionale Verbindung zwischen Client und Server ermöglicht.



Kotlin mit seiner prägnanten Syntax, vollständigen Java-Kompatibilität und leistungsstarken Unterstützung für Koroutinen (coroutines) ist ideal für die Entwicklung von Echtzeitanwendungen. Das Framework Ktor von JetBrains bietet integrierte WebSocket-Unterstützung und ermöglicht es, leistungsstarken und sicheren Code buchstäblich in wenigen Zeilen zu schreiben.



In diesem Artikel werden wir durchgehen, wie man eine vollwertige Echtzeitanwendung in Kotlin mit WebSocket erstellt. Sie erfahren:



  • Wie man einen WebSocket-Server mit Ktor einrichtet
  • Wie man sich von einem Browser oder einer mobilen App aus verbindet
  • Wie man den Nachrichtenaustausch in Echtzeit organisiert
  • Welche Muster und Ansätze für die Skalierung verwendet werden


1. Grundlagen von WebSocket und seine Vorteile in Kotlin



Was ist WebSocket?

WebSocket ist ein Protokoll, das über TCP arbeitet. Nach dem Verbindungsaufbau über einen HTTP-Handshake (upgrade) können Client und Server Daten in beide Richtungen austauschen, ohne erneute Anfragen. Dies reduziert die Latenz (latency) drastisch und verringert die Netzwerklast.



Warum Kotlin?

  • Koroutinen – ermöglichen die Verarbeitung tausender gleichzeitiger WebSocket-Verbindungen ohne Thread-Blockierung.
  • Ktor – ein leichtes asynchrones Framework mit nativer WebSocket-Unterstützung.
  • Typsicherheit – Fehler werden zur Kompilierzeit erkannt, nicht zur Laufzeit.
  • Plattformunabhängigkeit – derselbe Code kann auf JVM, JS und Native ausgeführt werden.


2. Erstellen eines WebSocket-Servers mit Ktor



Schritt 1: Projekteinrichtung

Fügen Sie die Abhängigkeiten in build.gradle.kts hinzu:

dependencies {    implementation("io.ktor:ktor-server-core:2.3.0")    implementation("io.ktor:ktor-server-netty:2.3.0")    implementation("io.ktor:ktor-server-websockets:2.3.0")    implementation("ch.qos.logback:logback-classic:1.4.11")}


Schritt 2: Basisserver mit WebSocket

import io.ktor.server.engine.*import io.ktor.server.netty.*import io.ktor.server.websocket.*import io.ktor.websocket.*import kotlinx.coroutines.delay

fun main() { embeddedServer(Netty, port = 8080) { install(WebSockets) webSocket("/chat") { send(Frame.Text("Willkommen im Chat!")) for (frame in incoming) { if (frame is Frame.Text) { val text = frame.readText() println("Empfangen: $text") send(Frame.Text("Echo: $text")) } } } }.start(wait = true)}

Dieser Code erstellt einen einfachen Echo-Server. Beim Verbindungsaufbau erhält der Client eine Begrüßung, und jede seiner Nachrichten wird mit dem Präfix "Echo:" zurückgesendet.



Schritt 3: Verarbeitung mehrerer Clients und Broadcast

Für einen Echtzeit-Chat muss eine Liste aktiver Sitzungen gespeichert werden:

import io.ktor.server.engine.*import io.ktor.server.netty.*import io.ktor.server.websocket.*import io.ktor.websocket.*import kotlinx.coroutines.channels.ConcurrentHashMap

val clients = ConcurrentHashMap<String, WebSocketSession>()

fun main() { embeddedServer(Netty, port = 8080) { install(WebSockets) webSocket("/chat") { val userName = "User_${System.currentTimeMillis()}" clients[userName] = this try {

Blogs

Buchempfehlungen