Introducción
Una aplicación en tiempo real es aquella que permite mantener dos o más clientes conectados y que a su vez les informa sobre cambios en las páginas sin necesidad de que estas lo soliciten de manera explícita.
💡 En pocas palabras, en estas aplicaciones, tanto el cliente cómo el servidor pueden mandar información cuando sea necesario.
En la actualidad, vivimos rodeados de este tipo de aplicaciones. Por ejemplo, desde las aplicaciones de mensajería (como WhatsApp, Signal, Telegram, etc). hasta las redes sociales (como el feed Facebook, Twitter, Instagram, etc.) o aplicaciones de deliverys, son aplicaciones en tiempo real.
Es aquí donde el modelo tradicional se nos queda corto, haciendo difícil el desarrollo de aplicaciones en tiempo real, ya que en dicho modelo el cliente debe enviar una solicitud para que el servidor pueda responder.
💡 Es decir, no importa si el servidor tiene nueva información, esta no se verá reflejada en el navegador si este no la solicita y el navegador nunca sabrá cuándo solicitarla.
En parte, esto se debe a que el protocolo HTTP está diseñado especialmente para aplicaciones del tipo cliente-servidor (dónde lo “común” es mandar peticiones al servidor y recibir una respuesta de este) y no para aplicaciones en tiempo real.
Para resolver esta problemática, surgió el modelo Comet, que permitía simular aplicaciones en tiempo real, usando una solicitud HTTP de larga duración (HTTP Long-Polling Request).
Esto consistía básicamente en que el cliente iniciaba una solicitud, la cual se mantenía abierta por mucho tiempo, para que el servidor pueda responder en cuanto tenga nueva información, pero sin finalizar la respuesta.
💡 Comet también era conocido como “Ajas push” y fue usado por Gmail en sus inicios.
Esto era ineficiente, por ello, surge el protocolo Websockets, el cual, proporciona un canal bidireccional y full-duplex que permite tener varios puntos finales (o sockets) conectados al mismo tiempo.
Gracias a esto, los sockets pueden enviar datos a los demás (sin que estos los pidan), permitiendo tener una comunicación en tiempo real. Son más eficientes cuando necesitamos tener actualizaciones continuas, pues no se requiere enviar solicitudes para obtener una respuesta.
💡 Los sockets permiten que múltiples aplicaciones cliente se actualicen de forma “automática” siempre que hayan nuevos datos del servidor.