Biblioteca WebSocket Kotlin: Cliente y Servidor WebSocket Ktor

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Biblioteca WebSocket Kotlin: Ktor WebSocket



WebSocket es un protocolo que proporciona una conexión bidireccional permanente entre el cliente y el servidor. En el ecosistema de Kotlin, una de las bibliotecas más potentes y populares para trabajar con WebSocket es Ktor, un framework asíncrono creado por JetBrains. Ktor ofrece soporte completo para WebSocket tanto del lado del servidor como del lado del cliente, permitiendo crear fácilmente aplicaciones en tiempo real: chats, notificaciones, juegos en línea, rastreadores de datos y mucho más.



En este artículo, analizaremos en detalle cómo usar WebSocket en Kotlin con Ktor. Aprenderá a configurar dependencias, crear un servidor y cliente WebSocket, enviar y recibir mensajes, así como manejar errores y el cierre de la conexión.



Instalación y configuración



Para comenzar, agregue las dependencias necesarias en el archivo build.gradle.kts (o build.gradle). Si usa Gradle, incluya los siguientes módulos:



// build.gradle.ktsdependencies {    // Parte del servidor    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")

// Parte del cliente 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")}


Para Maven, use artefactos similares. Todos los módulos de Ktor versión 2.x.x admiten Kotlin Coroutines y funcionan en JVM, Android, iOS y otras plataformas.



Creación de un servidor WebSocket con Ktor



Escribamos un servidor echo simple que reciba mensajes del cliente y los devuelva. El servidor escuchará en el puerto 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("¡Bienvenido al chat!") for (frame in incoming) { if (frame is Frame.Text) { val text = frame.readText() println("Recibido: $text") send("Echo: $text") } } } } }.start(wait = true)}


En este ejemplo:

  • install(WebSockets) — conecta el plugin WebSocket al servidor.
  • webSocket("/chat") — define el endpoint para la conexión.
  • send() — envía un mensaje al cliente.
  • incoming — canal por el que llegan los frames del cliente.
  • Los frames pueden ser de texto (Frame.Text), binarios (Frame.Binary) o de control.


Creación de un cliente WebSocket con Ktor



Ahora escribamos un cliente que se conecte a nuestro servidor, envíe un saludo y lea las respuestas.



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") { // Leemos el saludo val welcome = incoming.receive() as Frame.Text println("Servidor: ${welcome.readText()}")

// Enviamos un mensaje send(Frame.Text("¡Hola, servidor!"))

// Esperamos la respuesta echo val response = incoming.receive() as Frame.Text println("Servidor: ${response.readText()}")

// Cerramos la conexión close() }

client.close()}


El cliente usa d

Recommendations