Aplicaciones web en tiempo real: ¿Qué es WebSocket?

Las **aplicaciones web en tiempo real** forman parte de la mayoría de los servicios que frecuentamos en nuestro día a día en internet. Existen diversas estrategias que usan los programadores web para establecer una comunicación constante entre el usuario y el servidor, una de ellas es **WebSocket**.
 
## Tiempo real en aplicaciones web
 
En una página web, la comunicación entre el usuario y el servidor es lo que permite que la página pueda funcionar correctamente. Tradicionalmente, el usuario es quien debe tomar las riendas en esta interacción para hacerla efectiva, ya que el servidor por su parte se encuentra siempre a la expectativa de que le presenten una pregunta o una petición antes de responder.
 
En base a ello, en una página web tradicional el usuario solo recibirá la información que solicite y, al momento en que la solicite, es él quien debe interactuar para poder obtener la información que busca, teniendo que hacer más pasos durante el proceso.
 
La necesidad de servicios web más dinámicos y nuevas soluciones hicieron necesaria la creación de estándares que permitieran una comunicación en tiempo real, a través de los cuales el usuario y el servidor pudieran interactuar de forma más sencilla. La comunicación en tiempo real en aplicaciones web es lo que hace posible la implementación de chats, bandejas de entrada como correos electrónicos, cajas de comentarios y demás herramientas que muestran al usuario información al instante, sin necesidad de que éste tenga que refrescar la aplicación o tenga que preguntarle al servidor si hay nueva información o cambios para mostrarle.
 
## ¿Cómo lograr la comunicación web en tiempo real?
 
Existen diversas herramientas que implementan los desarrolladores web para la creación de aplicaciones que brindan información en tiempo real, y quizás WebSocket sea una de las más populares. Sin embargo, existen muchas otras soluciones como **Polling**, **Long Polling** o **Server-Sent Event (SSE)**, cada una con sus ventajas y desventajas.
 
Por su parte, WebSocket establece una conexión entre dos puntos llamados **sockets** y hace posible una comunicación bidireccional y más directa, donde los bajos tiempos de respuesta la hacen una solución altamente considerada en la programación web.
 
## ¿Cómo funciona WebSocket?
 
La comunicación inicial entre el cliente y el servidor a través de WebSocket se da gracias a un apretón de manos o handshake **HTTP**, donde el cliente comparte todos los datos de identificación necesarios para el intercambio constante de información. A partir de ese momento, la interacción entre ambas partes se da a través de un canal conformado por sockets **TCP**, el cual se mantendrá abierto siempre y cuando exista información que sea necesaria transmitir.
 
Una vez realizado el handshake, el servidor pondrá a disposición del cliente toda la información sin que sea necesario pedirla; una solución que puede ser apreciada en juegos en línea, chats de atención al cliente o en las notificaciones en redes sociales.
 
## Ventajas de utilizar WebSocket
 
Por su diseño, la comunicación rápida que nos brinda WebSocket la convierte en una herramienta ideal para soluciones donde tener bajos tiempos de respuesta es clave, como puede ser el caso al implementar mensajería instantánea en una página web, mostrar actualizaciones de precios y el stock de un producto en páginas de comercio electrónico o al compartir con el usuario las variaciones de precio en la bolsa de valores.
 
La comunicación bidireccional otorgada por WebSocket facilita la forma en que el usuario interactúa con el navegador y a su vez con el servidor, de manera que un mensaje que pueda ser enviado por una aplicación de mensajería será cargado al instante y recibido al mismo tiempo por el destinatario.
 
## Desventajas de utilizar WebSocket
 
La implementación de WebSocket requiere de trabajo y configuración por parte del equipo de desarrollo, si consideramos que su funcionamiento puede no ser fácil de testear. Algunos desarrolladores consideran que el implementar WebSocket viene acompañado de escribir una considerable cantidad de código, lo que puede convertir esto en una tarea tediosa.
 
## ¿Dónde se puede implementar WebSocket?
 
La mayoría de los navegadores web son compatibles con WebSocket, sin embargo y al igual que ocurre con otras herramientas de desarrollo web actuales, es siempre recomendable contar con un navegador actualizado para poder apreciar los mejores resultados. En páginas como [Can I Use](https://caniuse.com/) podemos ver una tabla de compatibilidad para diversos navegadores.
 
Desde el enfoque del servidor es posible implementar WebSocket utilizando los siguientes lenguajes de programación y frameworks:
 
#### C++
LibWebSockets
#### Erlang
Shirasu
#### Java
Jetty
#### .Net
SuperWebSocket
#### Node.js
Socket.IO
WebSocket-Node
ws
#### Python
pyWebSocket
Tornado
#### Ruby
EventMachine
 
 
##### Referencias
 
https://www.freecodecamp.org/news/5-ways-to-build-real-time-apps-with-javascript-5f4d8fe259f7/
https://medium.com/geekculture/understand-whats-behind-real-time-web-apps-e60168129480
https://www.ionos.es/digitalguide/paginas-web/desarrollo-web/que-es-websocket/
https://codigofacilito.com/articulos/como-programar-aplicaciones-en-tiempo-real