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
Auch in der Bibliothek
Arbeiten mit Excel in TypeScript: Bibliotheken, Tools und Codebeispiele
GraphQL in C# (.NET): Die Bibliotheken Hot Chocolate und GraphQL.NET zur API-Erstellung
JWT-Tokens in JavaScript (Node.js): Vollständiger Leitfaden
FastEndpoints für C# (.NET): Komplettleitfaden mit Beispielen