intive Argentina Blog

WebSockets vs. Long Polling

Originariamente, las aplicaciones web se construían sobre un modelo cliente-servidor, en el que quien iniciaba todas las transacciones era siempre el primero. Si bien es sencillo de implementar, este mecanismo corre con una debilidad: no le permite al servidor enviar información por voluntad propia.

Les propongo ahora que pensemos en aplicaciones con información en tiempo real (verán que el antiguo método no se adaptaría a esta lógica) y descubran las funcionalidades de Long Polling o WebSockets.

 

Long Polling

La técnica de Long Polling nos permite emular una funcionalidad de tipo “server push” sobre HTTP en la que el servidor, a diferencia de cómo era en el antiguo método,“inicia” los eventos.

1webs

 

¿Cómo funciona esta técnica?

El cliente inicia una request, abriendo la conexión con el servidor hasta recibir una respuesta. Luego, el servidor mantiene ese pedido abierto hasta tener un nuevo evento y responde con la información que posea en ese instante. Al recibir la respuesta, el cliente vuelve a realizar otro pedido, manteniendo nuevamente la conexión abierta y repitiendo el ciclo.

 

Pros y contras de utilizar Long Polling

Entre las ventajas, destacamos:

  • Es una técnica sencilla de implementar.
  • Es similar a eventos que, disparados por el servidor, lo convierten en un participante completamente activo en la comunicación.

Como desventajas podemos mencionar:

  • Las aplicaciones de procesamiento intensivo pueden llegar a encontrarse con latencia en la transmisión continua de datos al cliente.
  • Se debe configurar de manera tal que las conexiones no permanezcan vivas indeterminadamente, lo que podría causar re-conexiones constantes.
  • Puede generarse acumulación de procesamiento en la cola y en el servidor, implicando el uso intensivo de recursos y algunas pérdidas de información.

 

WebSockets

WebSocket es un protocolo que provee canales de comunicación full-duplex sobre una única conexión TCP. Un canal de comunicación es full-duplex cuando los datos van en ambos sentidos de manera simultánea. Cuando una comunicación cliente-servidor no se da así, ya que el cliente hace un pedido y espera la respuesta del servidor, con websocket se envían datos entre cliente y servidor sin esperar respuesta alguna.

2webs

 

¿Cómo funciona este protocolo?

El cliente establece una conexión TCP con el servidor mediante un “handshake”. Tanto el servidor como cliente pueden enviarse mensajes entre sí en el momento en que deseen. Así, la conexión permanece viva hasta que cualquiera de los dos extremos la cierre explícitamente.

El “handshake” (proceso de negociación de los parámetros del canal de comunicación entre un cliente y un servidor) al que se hacía referencia arriba se da de este modo:

3webs
Un ejemplo básico usando la API de Websocket

En la mayoría de los casos, utilizaremos librerías que nos permiten implementar la tecnología de WebSocket a más alto nivel. Entre ellas encontramos: Socket.io, WebSocket-Node, Faye.

 

Pros y contras de utilizar WebSockets

Algunas de las ventajas son:

  • Elimina problemas de latencia que pueden ser provocados por Long Polling.
  • Mantiene una única conexión abierta.
  • Se evita el envío de headers, como las cookies, en cada intercambio.
  • Puede funcionar sobre el puerto 80 y no requiere configuración adicional en este aspecto (por ejemplo de firewall).

Entre las desventajas señalamos las siguientes:

  • Algunos navegadores de los más utilizados, o sus versiones antiguas, no soportan esta tecnología.
  • Requiere una acción explícita para cerrar la conexión.
  • Al mantener una conexión activa durante toda la comunicación, se genera gran consumo de ancho de banda.

 

Conclusión

La decisión de emplear WebSockets o Long Polling dependerá mucho de los recursos de los que dispongamos y la escalabilidad que tenga la aplicación sobre la que trabajamos. La mayoría de las librerías mencionadas anteriormente tienen como estrategia común que cuando no se pueden conectar utilizando WebSockets (ya sea por problemas de conexión o navegadores que no soportan esta tecnología), tienen como fallback el uso de Long Polling. En la actualidad son muchas las aplicaciones que usan WebSockets: juegos, redes sociales o chats como Slack, entre otros. Podemos decir, entonces, que se trata de una tecnología cuyo uso -seguramente- se incrementará en los próximos años.

¡Esperamos haber sido claros en el artículo y haberlos ayudado con él en sus próximas elecciones!

Mariano Furriel

Es desarrollador en la empresa desde marzo de 2016 e integra la Brigada Frontend. Cursa la carrera de Ingeniería Informática en la Universidad Argentina de la Empresa (UADE). Siempre está atento a leer y aprender  sobre nuevas tecnologías que permitan mejorar los diseños de las aplicaciones.

Deja un comentario