WebSocket es un protocolo de comunicación que permite la interacción bidireccional entre un cliente -que podría ser un navegador web- y un servidor en tiempo real.
Este protocolo fue desarrollado en el año 2011 por la IETF (Grupo de Trabajo de Ingeniería de Internet) y forma parte del estándar conocido como RFC 6455.
Su propósito es mejorar la transmisión de datos en aplicaciones que requieren actualizaciones o respuestas inmediatas, como los juegos online, chats en línea, plataformas de mensajería instantánea o incluso sistemas de comercio electrónico.
En contraste con otros protocolos populares, como el HTTP, que se basa en un modelo de solicitud y respuesta (donde el cliente realiza una petición y el servidor procede a responder), WebSocket ofrece la capacidad de que tanto el cliente como el servidor envíen y reciban datos en el momento en que lo requieran.
Esto, además, elimina la necesidad de tener que abrir y cerrar la conexión repetidamente, lo que representa una ventaja importante porque minimiza considerablemente la latencia y reduce el uso del ancho de banda, siendo sumamente útil para los servicios que, por lo general, necesitan de un flujo constante de datos para funcionar satisfactoriamente.
Cómo funciona el protocolo WebSocket
El funcionamiento del WebSocket se da de la siguiente manera:
-Se inicia una conexión (handshake). Todo comienza cuando el cliente envia la solicitud de conexión al servidor mediante el HTTP, lo que se conoce como handshake.
La solicitud contiene un encabezado especial que se encarga de iniciar la comunicación. Si el servidor lo acepta, responde empleando un código 101 Switching Protocols.
En el HTTP, la conexión se va a cerrar una vez el servidor ya ha respondido. Sin embargo, en el WebSocket la conexión seguirá estando abierta. Esto justamente es lo que va a permitir que el canal pueda estar disponible, bien sea para enviar o recibir datos cuando se necesite.
-Se intercambian datos. Tras handshake, se crea un canal de comunicación bidireccional para que el cliente y el servidor pueden realizar intercambio de mensajes sin que ello suponga tener que hacer una nueva conexión.
Estos datos viajan en un formato denominado «tramas» que almacena la información de forma eficiente y con una menor sobrecarga que el HTTP, lo que se traduce en un rendimiento mucho más ágil y rápido.
-Se producen los pings y pongs. Para garantizar que la conexión siempre se encuentre activa, el servidor envía mensajes conocidos como ping al cliente en intervalos muy regulares.
Mientras tanto, el cliente se encarga de recibir ese ping, pero inmediatamente emitirá su respuesta a través de un pong, que niega la posibilidad de que existan caídas por algún tipo de inactividad.
-Se cierra la conexión. El cliente, así como el propio servidor tienen la potestad de efectuar el cierre de la conexión cuando lo necesiten a través de una trama de control de cierre, en donde cada una de las partes involucradas manifiesta su intención de finalizar la comunicación.
Si ambas partes realizan la confirmación, la conexión procederá a cerrarse de manera ordenada. Sin embargo, si no se recibe confirmación, la parte que solicitó el cierre puede optar por finalizar la conexión de una manera unilateral o incluso esperar un tiempo determinado para poder gestionar el cierre o realizar reintentos de conexión.



