WebSocket es un protocolo de red basado en TCP que establece cómo deben in­te­r­ca­m­biar­se datos entre redes. Puesto que es un protocolo fiable y eficiente, es utilizado por prá­c­ti­ca­me­n­te todos los clientes. El protocolo TCP establece co­ne­xio­nes entre dos puntos finales de co­mu­ni­ca­ción, llamados sockets. De esta manera, el in­te­r­ca­m­bio de datos puede pro­du­ci­r­se en las dos di­re­c­cio­nes.

En las co­ne­xio­nes bi­di­re­c­cio­na­les, como las que crea WebSocket (a veces también websocket o web socket), se in­te­r­ca­m­bian datos en ambas di­re­c­cio­nes al mismo tiempo. La ventaja de este in­te­r­ca­m­bio es que se accede de forma más rápida a los datos. En concreto, WebSocket permite así una co­mu­ni­ca­ción directa entre una apli­ca­ció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 tra­n­s­mi­sión de páginas web suele rea­li­zar­se mediante una conexión HTTP. Este protocolo sirve para tra­n­s­mi­tir 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 so­li­ci­ta­do. 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.

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 es­ta­ble­z­ca 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 ide­n­ti­fi­ca­ción ne­ce­sa­rios para el in­te­r­ca­m­bio de in­fo­r­ma­ción.

El canal de co­mu­ni­ca­ción se queda, por así decirlo, abierto tras el handshake. El servidor puede activarse por sí mismo y poner toda la in­fo­r­ma­ción a di­s­po­si­ción del cliente, sin que este tenga que pedírselo. Las no­ti­fi­ca­cio­nes push de las páginas web también funcionan según este principio. Si el servidor dispone de nueva in­fo­r­ma­ción, se lo comunica al cliente, sin necesidad de recibir una solicitud es­pe­cí­fi­ca para ello.

Para iniciar el in­te­r­ca­m­bio, 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:

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:

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 co­rre­s­po­n­de 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 es­ta­ble­cer co­ne­xio­nes de forma rápida. Es el caso, por ejemplo, de los chats de asi­s­te­n­cia técnica, de los tickers de noticias o de ac­tua­li­za­cio­nes de bolsa en directo, de los servicios de me­n­sa­je­ría in­s­ta­n­tá­nea y de los juegos en tiempo real. Los patrones co­n­ve­n­cio­na­les de solicitud de conexión han dejado de ser útiles para cubrir las ne­ce­si­da­des de muchas empresas.

En las redes sociales también resulta muy útil WebSocket: para es­ta­ble­cer co­ne­xio­nes en directo con otras personas, así como para enviar y recibir mensajes in­s­ta­n­tá­neos, WebSocket es siempre una buena opción, ya que permite obtener altas ve­lo­ci­da­des de tra­n­s­mi­sión y limitar los tiempos de latencia.

¿Qué ventajas ofrece WebSocket?

El uso tra­di­cio­nal de las co­ne­xio­nes HTTP tiene el in­co­n­ve­nie­n­te de que el cliente siempre carga la página HTML entera. Para resolver el problema, se de­sa­rro­lló la te­c­no­lo­gía AJAX. Esta tenía, por su parte, la de­s­ve­n­ta­ja de es­ta­ble­cer co­ne­xio­nes uni­di­re­c­cio­na­les, es decir, que solo permiten la co­mu­ni­ca­ción en una dirección, lo cual daría lugar a largos tiempos de espera en las in­te­n­si­vas apli­ca­cio­nes de hoy en día, es­pe­cia­l­me­n­te en los chats. WebSocket, en cambio, crea co­ne­xio­nes bi­di­re­c­cio­na­les que permiten el in­te­r­ca­m­bio 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 di­re­c­ta­me­n­te al otro lado.

WebSocket: ejemplos de usos útiles

WebSocket es co­n­ve­nie­n­te 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 co­m­pli­ca­cio­nes. Algunos de estos campos de apli­ca­ción son los si­guie­n­tes:

  • Juegos en línea
  • Pla­ta­fo­r­mas de compra y de venta, como eBay
  • Chats de atención al usuario
  • Tickers de noticias de­po­r­ti­vas en directo
  • Ac­tua­li­za­cio­nes en tiempo real de las redes sociales

WebSocket no es un sustituto total de HTTP, pero puede usarse como canal de co­mu­ni­ca­ción eficiente y bi­di­re­c­cio­nal siempre que se necesite dar o recibir in­fo­r­ma­ción en tiempo real.

¿Dónde se ha im­ple­me­n­ta­do 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 im­ple­me­n­tar­se con los si­guie­n­tes lenguajes de pro­gra­ma­ción y fra­me­wo­r­ks:

  • Node.js
    • Socket.IO
    • WebSocket-Node
    • ws
  • Java
    • Jetty
  • Ruby
    • Eve­n­t­Ma­chi­ne
  • Python
    • py­We­b­So­c­ket
    • Tornado
  • Erlang
    • Shirasu
  • C++
    • li­b­We­b­So­c­kets
  • .NET
    • Su­pe­r­We­b­So­c­ket
En resumen

El protocolo WebSocket es una te­c­no­lo­gía re­la­cio­na­da con el de­sa­rro­llo 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 apli­ca­cio­nes web modernas reac­cio­nar mucho más rápido de lo que lo harían basándose en la co­mu­ni­ca­ción HTTP co­n­ve­n­cio­nal. Sin embargo, esto no significa en absoluto que haya que re­em­pla­zar el protocolo tra­di­cio­nal: a pesar de la exi­s­te­n­cia de WebSocket, HTTP sigue siendo un estándar clave en Internet.

Ir al menú principal