WebSockets

> Temas > WebSockets
Editar

Tecnología de transmisión de datos cliente / servidor, que tiene la característica de mantener siempre abierto el canal de comunicación y permitir iniciar el tránsito de datos de modo bidireccional, necesario en aplicaciones realtime.

WebSockets es una de las tecnologías disponibles en el navegador para implementar comunicaciones entre el cliente (navegador) y el servidor. Mediante WebSockets el cliente puede abrir una conexión con el servidor, realizando comunicaciones de datos de una manera ágil. Tanto cliente como servidor son capaces de enviar datos por el canal abierto, algo necesario para implementar funcionalidades en tiempo real.

Para entender Sockets es interesante observar cómo funciona una solicitud por el protocolo habitual en la web: HTTP.

En HTTP el cliente (navegador) debe realizar una solicitud al servidor. Con ello se abre un canal de comunicación que permite que el servidor envíe la página o cualquier dato solicitado (imágenes, archivos css…) y, una vez que el servidor envió la información, la solicitud termina y el canal de comunicación se cierra. Además, otra característica de HTTP es que la la solicitud se origina siempre en el lado del cliente, es decir, es el navegador el que tiene que solicitar algo del servidor para que la comunicación comience.

Sin entrar en demasiados detalles, la tecnología de sockets tiene un par de diferencias fundamentales con respecto a HTTP:

  • La diferencia fundamental es que HTTP es unidireccional, en el sentido en el que el navegador debe realizar una solicitud al servidor para recibir un dato. El servidor no es capaz de iniciar el envío al navegador de ningún dato si el cliente no lo ha solicitado.
  • Con sockets el canal de comunicación permanece abierto, de modo que las comunicaciones son prácticamente instantáneas entre el servidor de sockets y el cliente que comunica.

Estas diferencias hacen que WebSockets sea una tecnología especialmente indicada para las comunicaciones en tiempo real, como las que requieren funcionalidades como un chat, o para que el navegador pueda recibir comunicaciones, como notificaciones, sin que la página haya tenido que recargarse por completo, algo fundamental en modelos de aplicación como las SPA, que no realizan la recarga de la página completamente, sino que solamente realizan request en los que reciben datos en crudo.

Más información:

WebSockets

Por qué hace falta WebSockets para aplicaciones Realtime

Si queremos hacer una aplicación en tiempo real tenemos dos alternativas:

  • Usar HTTP
  • Usar WebSockets

Problemas del uso de HTTP para aplicaciones realtime

Nada nos impide hacer uso de HTTP para poder crear nuestra aplicación en tiempo real, como podría ser un chat o un sistema de localización de una flota. Sin embargo, en HTTP tendríamos que realizar procesos no demasiado eficientes.

Si por ejemplo estamos desarrollando un chat, el cliente no tendría problemas para enviar mensajes. Esos mensajes los envíaría al servidor y listo. Sin embargo, las otras personas, para enterarse que hay nuevos mensajes en la sala tendrían que iniciar una solicitud HTTP, dado que HTTP solamente permite que las conexiones se inicien por orden de los clientes.

Así, si tenemos 100 personas en una sala de chat, todas esas personas tendrían que estar constantemente, cada 5 segundos por ejemplo, haciendo un request al servidor para saber si hay nuevos mensajes. Esto serían 100 request cada 5 segundos, 1200 request por minuto. Si pensamos en múltiples salas de chat, posiblemente tendríamos un servidor saturado rápidamente.

Además, con cada request de un cliente el protocolo HTTP requiere realizar toda una ceremonia para poder transferir información, aunque sea simplemente la respuesta algo como "no hay mensajes nuevos", el servidor requiere iniciar la solicitud, y realizar diversas comunicaciones para enviar la respuesta, al cabo de unos segundos.

Cómo WebSockets permite la mejora de las aplicaciones realtime

En contra, con WebSockets las conexiones permanecen abiertas. Esto quiere decir que no hay ningún tipo de ceremonia para enviar los datos, simplemente viajan por el canal abierto, lo que es infinitamente más rápido.

Pero lo más importante, el servidor puede iniciar las comunicaciones. Eso quiere decir que, cuando se recibe un mesaje, el servidor lo transmitirá por el canal abierto para todas las personas que se encuentren en la sala, sin que los clientes tengan que hacer nada. Así se evita conexiones innecesarias con el servidor, simplemente para que el servido responda "no hay nada nuevo".

Así pues, WebSockets permite comunicaciones con mayor eficiencia, ya que son más rápidas y no requieren conexiones innecesarias desde el cliente al servidor para solicitar datos. El servidor simplemente los enviará cuando los tenga y punto.

Editar

Mejores tecnologías para trabajar con Web Sockets

Si se trata del cliente no hay duda, usamos Javascript para el acceso a cualquier recurso por web sockets. En principio no hay una librería que sea de referencia para el uso de web sockets como cliente, sino que dependiendo del servidor de websockets que necesitas conectar, puede que tengas que usar una u otra específica para él.

En lo que respecta al servidor, las tecnología más usada para hacer un backend que ofrezca datos en tiempo real sería Socket.io, que es un producto altamente configurable para hacer emisiones en Web Sockets.

Sin embargo existen otros productos para hacer Web Sockets a más alto nivel, que nos permiten instalar aplicaciones completas para conseguir enviar datos en tiempo real, sin tener que hacer el backend completo. Dos ejemplos son Laravel-Websockets y Socketi. Estos dos productos tienen una característica muy interesante y es que son compatibles con Pusher.

Pusher es un servicio para hacer websockets que simplifica mucho el trabajo para los desarrolladores, ofreciendo tanto librerías del lado del cliente como del lado de servidor (backend con varios lenguajes), con las que hacer comunicaciones sencillas de implementar. Es un servicio propietario, que tiene una parte gratuita suficiente para pequeñas aplicaciones y un número de usuarios concurrentes limitado. Para aplicaciones un poco mayores hay que pagar y las coutas no son especialmente baratas, por eso productos como Laravel Websockets o Socketi están muy bien, porque nos dispensan el pago, aunque no son simples de configurar.

Otra alternativa interesante y muy fácil de usar para hacer comunicaciones en tiempo real es Firebase.

Editar

¿Quieres añadir algo sobre WebSockets?

Crea artículos, recursos o comparte información sobre WebSockets

Crear un bloque

Temas relacionados

Preguntas y respuestas de WebSockets

Se han recibido 0 faqs en WebSockets

Hacer una pregunta