WebSocket-Bibliothek Kotlin: ktor-client-websockets
In der modernen Webentwicklung wird der Datenaustausch in Echtzeit immer häufiger benötigt: Online-Chats, Benachrichtigungen, Börsenkurse, Mehrspieler-Spiele. Für Kotlin ist eine der leistungsstärksten und nativen Bibliotheken für die Arbeit mit dem WebSocket-Protokoll ktor-client-websockets – Teil des Ktor-Ökosystems (Kotlin HTTP-Client).
In diesem Artikel werden wir im Detail besprechen, wie man WebSocket in Kotlin mit Ktor einbindet und verwendet. Sie erfahren, wie Sie die Bibliothek installieren, eine Verbindung herstellen, Nachrichten senden und empfangen sowie Fehler und Verbindungsabbrüche behandeln.
Was ist WebSocket und warum wird es benötigt?
WebSocket ist ein Protokoll, das eine dauerhafte bidirektionale Verbindung zwischen einem Client (z. B. einer Android-App oder einem Server) und einem Server herstellt. Im Gegensatz zu HTTP, bei dem der Client jedes Mal eine Anfrage initiiert, ermöglicht WebSocket dem Server, Daten sofort an den Client zu senden, sobald sie verfügbar sind. Dies ist ideal für:
- Chats und Messenger;
- Benachrichtigungen und Ereignis-Feeds;
- Spiele und kollaborative Editoren;
- Finanzticker und Trading.
Installation der Bibliothek ktor-client-websockets
Fügen Sie zunächst die Abhängigkeit zu Ihrer build.gradle.kts hinzu (Projekt auf Kotlin/JVM oder Kotlin Multiplatform).
// build.gradle.ktsdependencies { implementation("io.ktor:ktor-client-core:2.3.7") implementation("io.ktor:ktor-client-cio:2.3.7") // oder eine andere Engine implementation("io.ktor:ktor-client-websockets:2.3.7")}Wenn Sie Kotlin Multiplatform verwenden, stellen Sie sicher, dass Sie das Modul für jede Plattform hinzugefügt haben (z. B. ktor-client-okhttp für Android).
Erstellen eines WebSocket-Clients
Die Hauptklasse für die Arbeit mit WebSocket ist HttpClient mit dem Plugin WebSockets. Betrachten wir ein einfaches Beispiel für die Verbindung zu einem WebSocket-Server.
import io.ktor.client.*import io.ktor.client.plugins.websocket.*import io.ktor.websocket.*
suspend fun main() { val client = HttpClient { install(WebSockets) }
client.webSocket("ws://echo.websocket.org") { // Nachricht senden send(Frame.Text("Hallo, WebSocket!"))
// Antwort empfangen for (frame in incoming) { when (frame) { is Frame.Text -> { println("Empfangen: ${frame.readText()}") } else -> println("Anderer Frame-Typ: $frame") } } }
client.close()}In diesem Code:
- Erstellen wir einen HTTP-Client mit WebSocket-Unterstützung.
- Stellen wir eine Verbindung zum Testserver
ws://echo.websocket.orgher. - Senden wir eine Textnachricht.
- Lesen wir eingehende Frames und geben sie auf der Konsole aus.
Fehlerbehandlung und Verbindungsabbruch
In realen Anwendungen ist es wichtig, Ausnahmen korrekt zu behandeln und die Verbindung zu schließen. Verwenden Sie try-catch und finally.
import io.ktor.client.*import io.ktor.client.plugins.websocket.*import io.ktor.websocket.*import kotlinx.coroutines.*
suspend fun main() = coroutineScope { val client = HttpClient { install(WebSockets) }
try { client.webSocket("ws://your-server.com/ws") { // Senden send(Frame.Text("Ping"))
// Empfangen mit Timeout withTimeout(5000) { for (frame in incoming) { if (frame is Frame.Text) { println("Antwort: ${frame.readText()}") } } } } } catch (e: Exception) { println("WebSocket-Fehler: ${e.message}") } finally { cli Auch in der Bibliothek
Arbeit mit YAML in C++: Bibliotheken yaml-cpp und rapidyaml
Mockery PHP: Vollständige Anleitung mit Beispielen
SMS-Versand mit PHP: Überblick über API-Bibliotheken für die Integration