Bibliothèque WebSocket Kotlin : ktor-client-websockets
Dans le développement web moderne, l'échange de données en temps réel est de plus en plus nécessaire : chats en ligne, notifications, cotations boursières, jeux multijoueurs. Pour Kotlin, l'une des bibliothèques les plus puissantes et natives pour travailler avec le protocole WebSocket est ktor-client-websockets — faisant partie de l'écosystème Ktor (client HTTP Kotlin).
Dans cet article, nous allons détailler comment connecter et utiliser WebSocket en Kotlin avec Ktor. Vous apprendrez à installer la bibliothèque, établir une connexion, envoyer et recevoir des messages, ainsi qu'à gérer les erreurs et la fermeture de connexion.
Qu'est-ce que WebSocket et pourquoi en a-t-on besoin ?
WebSocket est un protocole qui assure une connexion bidirectionnelle permanente entre un client (par exemple, une application Android ou un serveur) et un serveur. Contrairement à HTTP, où le client initie chaque requête, WebSocket permet au serveur d'envoyer instantanément des données au client dès qu'elles apparaissent. C'est idéal pour :
- les chats et messageries ;
- les notifications et flux d'événements ;
- les jeux et éditeurs collaboratifs ;
- les tickers financiers et le trading.
Installation de la bibliothèque ktor-client-websockets
Pour commencer, ajoutez la dépendance dans votre fichier build.gradle.kts (projet Kotlin/JVM ou Kotlin Multiplatform).
// build.gradle.ktsdependencies { implementation("io.ktor:ktor-client-core:2.3.7") implementation("io.ktor:ktor-client-cio:2.3.7") // ou un autre moteur implementation("io.ktor:ktor-client-websockets:2.3.7")}Si vous utilisez Kotlin Multiplatform, assurez-vous d'ajouter le module pour chaque plateforme (par exemple, ktor-client-okhttp pour Android).
Création d'un client WebSocket
La classe principale pour travailler avec WebSocket est HttpClient avec le plugin WebSockets. Voici un exemple simple de connexion à un serveur WebSocket.
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") { // Envoyer un message send(Frame.Text("Bonjour, WebSocket !"))
// Recevoir la réponse for (frame in incoming) { when (frame) { is Frame.Text -> { println("Reçu : ${frame.readText()}") } else -> println("Autre type de trame : $frame") } } }
client.close()}Dans ce code, nous :
- Créons un client HTTP avec support WebSocket.
- Établissons une connexion avec le serveur de test
ws://echo.websocket.org. - Envoyons un message texte.
- Lisons les trames entrantes et les affichons dans la console.
Gestion des erreurs et fermeture de connexion
Dans les applications réelles, il est important de gérer correctement les exceptions et de fermer la connexion. Utilisez try-catch et 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") { // Envoi send(Frame.Text("Ping"))
// Réception avec timeout withTimeout(5000) { for (frame in incoming) { if (frame is Frame.Text) { println("Réponse : ${frame.readText()}") } } } } } catch (e: Exception) { println("Erreur WebSocket : ${e.message}") } finally { cli Aussi dans la bibliothèque
ORM pour Kotlin : comparaison d'Exposed, Room et Ktorm avec exemples
cron Go : guide complet avec exemples pratiques
Validation des données en C# (.NET) avec FluentValidation : guide complet
Migrations de bases de données en TypeScript : guide complet des outils et approches
Envoi de SMS en Go (Golang) : bibliothèque API