WebSocket-Bibliothek Kotlin: Ktor WebSocket Client und Server

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

WebSocket-Bibliothek Kotlin: Ktor WebSocket



WebSocket ist ein Protokoll, das eine permanente bidirektionale Verbindung zwischen Client und Server ermöglicht. Im Kotlin-Ökosystem ist Ktor eine der leistungsstärksten und beliebtesten Bibliotheken für die Arbeit mit WebSocket – ein asynchrones Framework, das von JetBrains entwickelt wurde. Ktor bietet umfassende WebSocket-Unterstützung sowohl auf der Server- als auch auf der Client-Seite und ermöglicht die einfache Erstellung von Echtzeitanwendungen: Chats, Benachrichtigungen, Online-Spiele, Daten-Tracker und vieles mehr.



In diesem Artikel werden wir im Detail besprechen, wie man WebSocket in Kotlin mit Ktor verwendet. Sie erfahren, wie Sie Abhängigkeiten konfigurieren, einen WebSocket-Server und -Client erstellen, Nachrichten senden und empfangen sowie Fehler und Verbindungsabbrüche behandeln.



Installation und Konfiguration



Fügen Sie zunächst die erforderlichen Abhängigkeiten in Ihre Datei build.gradle.kts (oder build.gradle) ein. Wenn Sie Gradle verwenden, binden Sie die folgenden Module ein:



// build.gradle.ktsdependencies {    // Server-Teil    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")

// Client-Teil implementation("io.ktor:ktor-client-core:2.3.0") implementation("io.ktor:ktor-client-cio:2.3.0") implementation("io.ktor:ktor-client-websockets:2.3.0")}


Verwenden Sie für Maven analoge Artefakte. Alle Ktor-Module der Version 2.x.x unterstützen Kotlin Coroutines und laufen auf JVM, Android, iOS und anderen Plattformen.



Erstellen eines WebSocket-Servers mit Ktor



Wir schreiben einen einfachen Echo-Server, der Nachrichten vom Client empfängt und zurücksendet. Der Server hört auf Port 8080.



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

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


In diesem Beispiel:

  • install(WebSockets) – bindet das WebSocket-Plugin an den Server.
  • webSocket("/chat") – definiert den Endpunkt für die Verbindung.
  • send() – sendet eine Nachricht an den Client.
  • incoming – der Kanal, über den Frames vom Client eingehen.
  • Frames können Text (Frame.Text), binär (Frame.Binary) oder Steuerungsframes sein.


Erstellen eines WebSocket-Clients mit Ktor



Jetzt schreiben wir einen Client, der sich mit unserem Server verbindet, eine Begrüßung sendet und Antworten liest.



import io.ktor.client.*import io.ktor.client.engine.cio.*import io.ktor.client.plugins.websocket.*import io.ktor.websocket.*import kotlinx.coroutines.*

suspend fun main() { val client = HttpClient(CIO) { install(WebSockets) }

client.webSocket("ws://localhost:8080/chat") { // Begrüßung lesen val welcome = incoming.receive() as Frame.Text println("Server: ${welcome.readText()}")

// Nachricht senden send(Frame.Text("Hallo, Server!"))

// Auf Echo-Antwort warten val response = incoming.receive() as Frame.Text println("Server: ${response.readText()}")

// Verbindung schließen close() }

client.close()}


Der Client verwendet d

Empfehlungen