# ¿Qué es WebSocket?

WebSocket es un protocolo de red basado en TCP que establece cómo deben intercambiarse datos entre redes. Puesto que es un protocolo fiable y eficiente, es utilizado por prácticamente todos los clientes. El protocolo TCP establece conexiones entre dos **puntos finales de comunicación**, llamados ***sockets***. De esta manera, el intercambio de datos puede producirse en las dos direcciones.

En las conexiones bidireccionales, como las que crea WebSocket (a veces también *websocket o web socket*), se intercambian datos en ambas direcciones al mismo tiempo. La **ventaja** de este intercambio es que **se accede de forma más rápida a los datos**. En concreto, WebSocket permite así una comunicación directa entre una aplicación web y un servidor WebSocket. En otras palabras: la web que se solicita se muestra *en tiempo real*.

## ¿Cómo funciona un web socket?

¿Cómo se accede a una página web sin WebSocket? En Internet, la transmisión de páginas web suele realizarse mediante una **conexión** **HTTP**. Este protocolo sirve para transmitir datos y hace posible la carga de las páginas web en el navegador. Para lograrlo, el cliente envía, con cada acción del usuario (un clic, por ejemplo), una solicitud al servidor.

Para acceder a una página web, en HTTP el cliente debe enviar primero una **solicitud al servidor**. Una vez enviada, el servidor puede responder y mostrar el contenido solicitado. Se trata de un rígido patrón de solicitud y respuesta que provoca, en última instancia, largos tiempos de espera entre la solicitud y la respuesta.

[![Imagen: Representación esquemática del funcionamiento de HTTP](https://www.ionos.es/digitalguide/fileadmin/_processed_/b/2/csm_visual-representation-of-how-http-works_dd3e6d14fa.webp "Representación esquemática del funcionamiento de HTTP")](https://www.ionos.es/digitalguide/fileadmin/DigitalGuide/Schaubilder/visual-representation-of-how-http-works.png) Las conexiones HTTP se basan en el clásico esquema de pregunta y respuesta, en el que el cliente debe enviar una solicitud al servidor para que este pueda mostrar el contenido solicitado.       El protocolo **WebSocket** permitió por primera vez acceder a una web de forma dinámica en tiempo real. Con este protocolo, basta con que el cliente establezca una conexión con el servidor, que se confirma mediante el llamado *apretón de manos* o ***WebSocket Protocol Handshake***. Con él, el cliente envía al servidor todos los datos de identificación necesarios para el intercambio de información.

**El canal de comunicación se queda, por así decirlo, abierto tras el *handshake***. El servidor puede activarse por sí mismo y poner toda la información a disposición del cliente, sin que este tenga que pedírselo. Las notificaciones *push* de las páginas web también funcionan según este principio. Si el servidor dispone de nueva información, se lo comunica al cliente, sin necesidad de recibir una solicitud específica para ello.

[![Imagen: Representación esquemática del funcionamiento de WebSocket](https://www.ionos.es/digitalguide/fileadmin/_processed_/c/b/csm_visual-representation-of-how-websocket-works_e110dd3f31.webp "Representación esquemática del funcionamiento de WebSocket")](https://www.ionos.es/digitalguide/fileadmin/DigitalGuide/Schaubilder/visual-representation-of-how-websocket-works.png) WebSocket puede entenderse como un canal de comunicación abierto, en el cual queda abierta una conexión activa tras el handshake inicial entre el cliente y el servidor. Así, el servidor también puede enviar información nueva al cliente sin que este tenga que solicitarlo previamente cada vez.       Para iniciar el intercambio, con WebSocket el cliente envía una solicitud, al igual que en el clásico HTTP. Sin embargo, la conexión se establece mediante TCP y permanece abierta tras el ***handshake*** entre el cliente y el servidor, que tiene la siguiente forma:

El cliente envía la solicitud:

```none
GET /chatService HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Origin: http://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
```

El servidor responde:

```none
HTTP/1.1 101 Switching Protocols
Upgrade: WebSocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Sec-WebSocket-Protocol: superchat
```

El nuevo esquema URL de WebSocket para las páginas web mostradas se define con el prefijo *ws* en lugar de *http*. El prefijo que corresponde a una conexión segura es, entonces, *wss*, de forma análoga a *https*.

## ¿Para qué se utiliza WebSocket?

Se utiliza WebSocket siempre que se trate de **establecer conexiones de forma rápida**. Es el caso, por ejemplo, de los **chats de asistencia técnica**, de los *tickers* de noticias o de actualizaciones de bolsa en directo, de los **servicios de mensajería instantánea** y de los juegos en tiempo real. Los patrones convencionales de solicitud de conexión han dejado de ser útiles para cubrir las necesidades de muchas empresas.

En las **redes sociales** también resulta muy útil WebSocket: para establecer conexiones en directo con otras personas, así como para enviar y recibir mensajes instantáneos, WebSocket es siempre una buena opción, ya que permite obtener altas velocidades de transmisión y limitar los tiempos de latencia.

## ¿Qué ventajas ofrece WebSocket?

El uso tradicional de las conexiones HTTP tiene el inconveniente de que el cliente siempre carga la página HTML entera. Para resolver el problema, se desarrolló la tecnología AJAX. Esta tenía, por su parte, la desventaja de establecer conexiones unidireccionales, es decir, que solo permiten la comunicación en una dirección, lo cual daría lugar a largos tiempos de espera en las intensivas aplicaciones de hoy en día, especialmente en los chats. WebSocket, en cambio, crea conexiones bidireccionales que permiten el intercambio de datos en ambos sentidos, lo cual hace posible el contacto directo con el navegador y, con ello, permite **cortos periodos de carga**: en cuanto se envía un mensaje, como podría ser uno en un chat de soporte técnico, este llega y se muestra directamente al otro lado.

## WebSocket: ejemplos de usos útiles

WebSocket es conveniente para todo aquel que desee tener una conexión rápida a Internet. Hoy en día, son muchos los ámbitos que requieren una conexión en tiempo real entre el cliente y el servidor para poder así ofrecer sus servicios sin complicaciones. Algunos de estos campos de aplicación son los siguientes:

- Juegos en línea
- Plataformas de compra y de venta, como eBay
- Chats de atención al usuario
- *Tickers* de noticias deportivas en directo
- Actualizaciones en tiempo real de las redes sociales

WebSocket no es un sustituto total de HTTP, pero puede usarse como canal de comunicación eficiente y bidireccional siempre que se necesite dar o recibir información en tiempo real.

## ¿Dónde se ha implementado ya WebSocket?

Para utilizar WebSocket necesitas un navegador actual:

- Internet Explorer a partir de la versión 10
- Firefox a partir de la versión 6
- Chrome a partir de la versión 14
- Opera a partir de la versión 12.10
- Safari a partir de la versión 6

Del lado del servidor, WebSocket puede implementarse con los siguientes lenguajes de programación y *frameworks*:

- Node.js
- Socket.IO
- WebSocket-Node
- ws
- Java
- Jetty
- Ruby
- EventMachine
- Python
- pyWebSocket
- Tornado
- Erlang
- Shirasu
- C++
- libWebSockets
- .NET
- SuperWebSocket

---

### En resumen

El protocolo WebSocket es una tecnología relacionada con el desarrollo de HTML5: un intento de hacer la web más rápida, más dinámica y más segura. Este eficiente protocolo permite a las aplicaciones web modernas reaccionar mucho más rápido de lo que lo harían basándose en la comunicación HTTP convencional. Sin embargo, esto no significa en absoluto que haya que reemplazar el protocolo tradicional: a pesar de la existencia de WebSocket, HTTP sigue siendo un estándar clave en Internet.

---


This is a markdown version of: [https://www.ionos.es/digitalguide/paginas-web/desarrollo-web/que-es-websocket/](https://www.ionos.es/digitalguide/paginas-web/desarrollo-web/que-es-websocket/) for AI/LLM consumption.