Mis apuntes de desarrollo web </>

WebSocket

WebSockets es un protocolo que permite una comunicación bidireccional en tiempo real entre un cliente y un servidor a través de una sola conexión persistente. A diferencia de HTTP, donde cada solicitud del cliente requiere una respuesta del servidor, WebSockets mantiene una conexión abierta, permitiendo el intercambio continuo de datos sin la sobrecarga de abrir y cerrar conexiones repetidamente.

Diferencias entre WebSocket y HTTP

Característica WebSocket HTTP
Modo de comunicación Comunicación bidireccional en tiempo real Cliente envía solicitud → Servidor responde
Estado de conexión Conexión persistente, mantiene una conexión abierta Sin estado (stateless), cada solicitud es independiente
Latencia Menor latencia, intercambio continuo de datos, ideal para aplicaciones en tiempo real Mayor latencia, cada solicitud requiere una respuesta del servidor
Casos de uso Chats, juegos en línea, transmisiones en vivo Páginas web estándar, API REST

Funcionamiento

  1. Establecimiento de la conexión (Handshake)
    • El cliente envía una solicitud HTTP con el encabezado Upgrade para indicar que quiere cambiar a WebSockets.
    • El servidor responde con un código de estado 101 (Switching Protocols) y actualiza la conexión a WebSocket.
  2. Comunicación Bidireccional: Una vez establecida la conexión, el cliente y el servidor pueden enviarse mensajes en cualquier momento sin necesidad de nuevas solicitudes HTTP.
  3. Cierre de la conexión: El cliente o el servidor pueden cerrar la conexión en cualquier momento.

API WebSocket

En el lado del servidor, Node.js proporciona un módulo nativo llamado ws para crear un servidor WebSocket. En el lado del cliente, se puede utilizar la API nativa de JavaScript WebSocket para establecer una conexión WebSocket.

Eventos de ws

open:
Se emite cuando el servidor WebSocket se inicia y está escuchando en un puerto.
connection
Se emite cuando un cliente se conecta al servidor WebSocket.
message
Se emite cuando el servidor recibe un mensaje del cliente.
close
Se emite cuando la conexión se cierra.

Métodos de ws

server():
Crea un servidor WebSocket.
on():
Escucha un evento específico.
send()
Envía un mensaje al cliente.
close()
Cierra la conexión.

Casos de uso

  • Chats en vivo
  • Notificaciones en tiempo real
  • Juegos multijugador
  • Monitoreo en tiempo real
  • Transmisiones en vivo

Ejemplo Implementación

Ejemplo servidor WebSocket Ejemplo cliente WebSocket