Olvídate del sondeo eterno: conoce Server-Sent Events en Kotlin
\n\nImagina: abres un terminal bursátil y las cotizaciones se actualizan solas. O entras al panel de administración de un sitio y ves un feed en vivo de la cantidad de usuarios en línea. Sin botones de "Actualizar", sin solicitudes interminables al servidor. Simplemente un flujo de datos en tiempo real.
\n\nEn el mundo del desarrollo web, esto se logra con Server-Sent Events (SSE), un protocolo que permite al servidor enviar datos al cliente de forma autónoma a través de una única conexión HTTP. Y hoy te mostraré cómo implementar SSE en Kotlin usando el framework Ktor. No será teoría aburrida, sino un ejemplo funcional completo, desde el servidor hasta el cliente.
\n\n¿Qué son Server-Sent Events y por qué son geniales?
\n\nHace tiempo, para obtener datos actualizados, los desarrolladores usaban polling (sondeo). El cliente preguntaba al servidor cada N segundos: "¿Hay novedades?". El servidor respondía: "No". Y así en un bucle. Esto es terriblemente ineficiente: el 99% de las solicitudes son vacías y el servidor gasta recursos procesando conexiones innecesarias.
\n\nSSE resuelve el problema de raíz: el cliente abre una sola conexión y el servidor envía los datos cuando aparecen. Es como suscribirse a un boletín de noticias: solo esperas y te traen la edición más reciente.
\n\nVentajas de Server-Sent Events en Kotlin:
\n- \n
- Simplicidad — funciona sobre HTTP estándar, no requiere bibliotecas adicionales en el cliente (excepto el EventSource integrado en el navegador). \n
- Reconexión automática — si la conexión se interrumpe, el navegador se reconecta solo. \n
- Ahorro de recursos — una sola conexión en lugar de docenas. \n
- Soporte nativo en Kotlin — con Ktor y corrutinas, escribir un servidor SSE es un placer. \n
¿El principal inconveniente? SSE es un canal unidireccional (solo del servidor al cliente). Si necesitas comunicación bidireccional, mira hacia WebSocket. Pero para notificaciones, feeds de noticias, cotizaciones, monitoreo, SSE es ideal.
\n\n¿Cuándo usar SSE en tu proyecto Kotlin?
\n\n- \n
- Feed de notificaciones — nuevos mensajes, comentarios, "me gusta". \n
- Monitoreo y registros — streaming de logs del servidor en tiempo real. \n
- Datos bursátiles — actualización de tipos de cambio, acciones, criptomonedas. \n
- Progreso de tareas — informe de carga de archivos o procesamiento de datos. \n
- Sistemas de alerta — señales de emergencia, estados de dispositivos. \n
Si buscas una forma de transmitir actualizaciones del servidor al cliente sin complicaciones, SSE Kotlin es tu opción. Pasemos al código.
\n\nConfiguración del proyecto: Ktor + SSE
\n\nPrimero, crearemos un nuevo proyecto Ktor. Usaré Gradle Kotlin DSL. En build.gradle.kts agregamos las dependencias:
val ktor_version = "2.3.7"\n\ndependencies {\n implementation("io.ktor:ktor-server-core:$ktor_version")\n implementation("io.ktor:ktor-server-netty:$ktor_version")\n implementation("io.ktor:ktor-server-content-negotiation:$ktor_version")\n implementation("io.ktor:ktor-serialization-kotlinx-json:$ktor_version")\n implementation("ch.qos.logback:logback-classic:1.4.14")\n implementation("io.ktor:ktor-server-cors:$ktor_version")\n}\n\nNota: para SSE no necesitamos una biblioteca adicional, Ktor soporta transmisión de datos de forma nativa mediante corrutinas.
\n\nCreando el endpoint SSE
\n\nAhora lo más interesante: escribiremos un servidor que envíe eventos al cliente cada 2 segundos. Será una simulación de cotizaciones bursátiles.
\n\nimport io.ktor.server.application.*\nimport io.ktor.server.engine.*\nimport io.ktor.server.netty.*\nimport io.ktor.server.response.*\nimport io.ktor.server.routing.*\nimport kotlinx.co