Bibliotecas WebSocket de Kotlin: creación de aplicaciones en tiempo real
WebSocket es un protocolo que proporciona una conexión bidireccional permanente entre el cliente y el servidor. A diferencia de HTTP, donde el cliente envía una solicitud y el servidor responde, WebSocket permite que el servidor inicie el envío de datos sin una solicitud. Esto lo hace ideal para chats, juegos en línea, cotizaciones bursátiles, notificaciones y otros sistemas que requieren transmisión instantánea de datos.
Kotlin, al ser un lenguaje JVM moderno, ofrece varias bibliotecas potentes para trabajar con WebSocket. En este artículo, analizaremos las tres opciones más populares: Ktor, OkHttp y kweb.
1. Ktor – framework para servidores y clientes
Ktor es un framework asíncrono de JetBrains, escrito completamente en Kotlin. Soporta WebSocket tanto del lado del servidor como del lado del cliente. Ktor utiliza corrutinas, lo que hace que el código sea conciso y eficiente.
Instalación (Gradle)
dependencies { 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") 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")}Ejemplo de servidor con Ktor
import io.ktor.server.engine.*import io.ktor.server.netty.*import io.ktor.server.routing.*import io.ktor.server.websocket.*import io.ktor.websocket.*
fun main() { embeddedServer(Netty, port = 8080) { install(WebSockets) routing { webSocket("/chat") { send(Frame.Text("¡Bienvenido al chat!")) for (frame in incoming) { if (frame is Frame.Text) { val text = frame.readText() send(Frame.Text("Usted escribió: $text")) } } } } }.start(wait = true)}Ejemplo de cliente con Ktor
import io.ktor.client.*import io.ktor.client.engine.cio.*import io.ktor.client.plugins.websocket.*import io.ktor.websocket.*import kotlinx.coroutines.*
fun main() = runBlocking { val client = HttpClient(CIO) { install(WebSockets) } client.webSocket("ws://localhost:8080/chat") { send(Frame.Text("¡Hola, servidor!")) for (frame in incoming) { if (frame is Frame.Text) { println("Respuesta: ${frame.readText()}") } } } client.close()}Ventajas de Ktor:
- Soporte completo de corrutinas de Kotlin
- Procesamiento asíncrono sin bloqueos
- Sintaxis unificada para servidor y cliente
- Soporte integrado para SSL, compresión y otros protocolos
2. OkHttp – cliente HTTP/WebSocket confiable
OkHttp es una biblioteca popular de Square, originalmente orientada a HTTP, pero con excelente soporte para WebSocket. Se utiliza en el desarrollo de Android y aplicaciones de servidor. OkHttp funciona de forma síncrona y asíncrona, admite reconexión y agrupación de conexiones.
Instalación (Gradle)
dependencies { implementation("com.squareup.okhttp3:okhttp:4.12.0")}Ejemplo de cliente con OkHttp
import okhttp3.*
fun main() { val client = OkHttpClient() val request = Request.Builder().url("ws://echo.websocket.org").build() val ws = client.newWebSocket(request, object : WebSocketListener() { override fun onOpen(webSocket: WebSocket, response: Response) { webSocket.send("¡Saludos desde OkHttp!") } override fun onMessage(webSocket: WebSocket, text: String) {