# WebSocket

> Una conexión entre navegador y servidor que queda abierta, para que hablen cuando quieran.

- Nivel: Avanzado
- Temas: Redes, Software
- URL: https://tidbit.legios.com.ar/es/websocket/
- En inglés: [WebSocket](https://tidbit.legios.com.ar/websocket/)

El HTTP común funciona como un intercambio de cartas: el navegador pregunta, el servidor responde y la conversación termina. El servidor no puede hablar primero. Un **WebSocket** es una conexión que queda abierta después de crearse, así cualquiera de los dos lados puede mandar un mensaje en cualquier momento, en los dos sentidos, sin volver a preguntar.

Arranca como un pedido HTTP normal con un encabezado especial que dice, más o menos, 'pasemos a WebSocket' (el **upgrade handshake**). Si el servidor acepta, se conserva la misma conexión TCP y desde ahí viajan mensajes chiquitos, llamados frames, en vez de pedidos y respuestas completos. En el navegador son unas pocas líneas: `new WebSocket("wss://chat.example.com")`, y después una función que se ejecuta cada vez que llega un mensaje. El prefijo `wss://` quiere decir que va cifrado, como HTTPS.

Es lo que hace que las apps web en tiempo real se sientan instantáneas: chats, resultados deportivos en vivo, documentos compartidos donde ves a otros escribir, pantallas de trading, juegos multijugador en el navegador. La alternativa vieja era el **polling**: preguntarle al servidor '¿hay algo nuevo?' cada pocos segundos, que es más lento y desperdicia pedidos cuando la respuesta es no. El costo es que el servidor tiene que mantener una conexión abierta por usuario, lo que ocupa memoria y pide cuidado al escalar, y las conexiones se cortan en redes malas, así que las apps tienen que reconectarse.

## Una analogía

HTTP es mandar mensajes de texto y esperar cada respuesta; un WebSocket es una llamada que queda conectada, donde cualquiera de los dos habla apenas tiene algo para decir.

## Para quedarse

- Una sola conexión queda abierta y lleva mensajes en los dos sentidos.
- Empieza como un pedido HTTP que se convierte; `wss://` es la versión cifrada.
- Reemplaza al polling en chats, datos en vivo, colaboración y juegos.
- El servidor mantiene una conexión por usuario y el cliente tiene que saber reconectarse.

## Para seguir leyendo

- [La API de WebSockets (MDN)](https://developer.mozilla.org/es/docs/Web/API/WebSockets_API)
- [WebSocket en Wikipedia](https://es.wikipedia.org/wiki/WebSocket)
- [RFC 6455, el protocolo WebSocket (en inglés)](https://www.rfc-editor.org/rfc/rfc6455)

## Términos relacionados

- [HTTP](https://tidbit.legios.com.ar/es/http/): El idioma de pedido y respuesta que hablan los navegadores y los sitios web.
- [Navegador web](https://tidbit.legios.com.ar/es/web-browser/): La app que trae páginas web desde internet y las dibuja en tu pantalla.
- [Servidor](https://tidbit.legios.com.ar/es/server/): Una computadora cuyo trabajo es responder pedidos de otras computadoras, todo el día.
- [TCP y UDP](https://tidbit.legios.com.ar/es/tcp-and-udp/): Dos formas de mandar paquetes: TCP verifica que llegue todo, UDP manda y sigue.
- [Cifrado](https://tidbit.legios.com.ar/es/encryption/): Mezclar datos para que solo quien tiene la clave pueda leerlos.
- [HTTPS](https://tidbit.legios.com.ar/es/https/): El candadito del navegador: tráfico web que nadie en el medio puede leer.
