Construyendo aplicaciones en tiempo real con WebSockets
El polling es perjudicial para tu aplicación.
Una vez construí un widget de chat usando polling con AJAX. Configuré la aplicación para que le pidiera al servidor nuevos mensajes cada segundo. Funcionaba, pero era lento. La interfaz de usuario se sentía lenta. El servidor trabajaba demasiado. La mayoría de las solicitudes devolvían datos vacíos. Se sentía como intentar llenar una bañera con una cucharadita.
Los WebSockets cambian esto.
En lugar de realizar solicitudes constantes, abres una única conexión persistente. Esto permite un flujo de datos bidireccional. El servidor puede enviar datos al cliente instantáneamente. El cliente puede enviar datos al servidor instantáneamente.
¿Por qué usar WebSockets?
• La latencia baja de cientos de milisegundos a decenas de milisegundos. • La carga del servidor se vuelve predecible. • Ahorras ancho de banda al eliminar los encabezados HTTP repetidos. • Funciona para chats, notificaciones en vivo y juegos multijugador.
Cómo funciona:
La conexión comienza con una solicitud de actualización (upgrade) HTTP. Si el servidor acepta, envía un código de estado 101. Después de eso, utilizas un protocolo de texto o binario puro. Ya no hay cookies ni encabezados que te ralenticen.
Trampas comunes que debes evitar:
- Caídas de conexión: Las redes fallan. Debes implementar una estrategia de reintento como el
exponential backoff. - Fugas de memoria: Cierra siempre tus sockets cuando un usuario se retire. Las conexiones "zombie" consumen la memoria del servidor.
- Bucles de mensajes: Al realizar un
broadcasting, omite al remitente original. De lo contrario, el usuario verá su propio mensaje dos veces. - Conexiones inactivas: Algunos proxies cierran las conexiones silenciosas. Usa un
heartbeatde ping/pong para mantener el socket vivo.
Deja de preguntarle al servidor si algo ha cambiado. Empieza a mantener una línea abierta para que puedas hablar siempre que lo necesites.
Tu desafío:
Toma un ejemplo básico de chat. Añade un indicador de "escribiendo...". Despliégalo en un host como Render o Fly.io. Una vez que veas ese indicador moverse en tiempo real sin usar polling, habrás subido de nivel.