
WebSocket: Lightweight Client-Server Communications
Andrew Lombardi
- Editorial
- O'Reilly
- Año
- 2015
- Páginas
- ~144
- Nivel
- Básico
De qué trata
Guía práctica y breve de O'Reilly en la que Andrew Lombardi enseña a usar WebSocket para crear aplicaciones en el navegador que se comportan como aplicaciones de escritorio, con comunicación bidireccional sobre una sola conexión en lugar de Ajax, Comet o long polling. Está dirigida a desarrolladores que conocen JavaScript y, preferiblemente, algo de Node.js, que es la plataforma de servidor de todos los ejemplos.
Empieza con la instalación de Node.js y npm y un «Hola, mundo» con WebSocket. Luego recorre la API del navegador: los eventos open, message, error y close, el ping/pong, los métodos send y close, los atributos readyState, bufferedAmount y protocol, y cómo detectar si el navegador admite WebSocket. Después implementa STOMP 1.0 sobre WebSocket con RabbitMQ y su plugin Web-Stomp, y compara alternativas de compatibilidad para navegadores antiguos: SockJS, Socket.IO (incluido su modo con Adobe Flash) y el servicio comercial Pusher, además del uso de proxies inversos. Los capítulos finales tratan la seguridad (WebSocket sobre TLS con certificados autofirmados, el modelo de seguridad basado en el origen, clickjacking y X-Frame-Options, denegación de servicio, enmascarado de tramas y validación de clientes), la depuración con OWASP ZAP para inspeccionar el handshake y las tramas, y un repaso detallado del protocolo: handshake, cabeceras Sec-WebSocket-Key y Sec-WebSocket-Accept, bit FIN, opcodes, fragmentación, cierre, subprotocolos y extensiones.
Los ejemplos se van construyendo a lo largo de los capítulos: una interfaz de cotizaciones bursátiles con su servidor, una aplicación de chat bidireccional que se vuelve a implementar con SockJS, Socket.IO y Pusher, y un demonio de precios de acciones conectado a RabbitMQ mediante STOMP. Es una introducción compacta y muy completa para sus 144 páginas, y su punto fuerte es que combina el uso práctico con la depuración y la seguridad. No trata frameworks de frontend ni el escalado horizontal de servidores WebSocket, y como todo el servidor es Node.js, quien trabaje con otro lenguaje tendrá que adaptar el código. Algunas soluciones de compatibilidad, como el modo Flash de Socket.IO, ya están obsoletas.
- WebSocket API
- Node.js
- Chat bidireccional
- STOMP
- RabbitMQ
- SockJS
- Socket.IO
- Pusher
- TLS / wss
- Seguridad
- Depuración con ZAP
- Protocolo WebSocket
¿Cómo enseña?
Teoría + práctica
- ✗ Sin ejercicios
- ✓ Incluye proyectos
Proyectos
Cotizaciones bursátiles en tiempo real
Interfaz web con un servidor Node.js que envía precios de acciones por WebSocket. Sirve para practicar los eventos, métodos y atributos de la API.
Chat bidireccional
Aplicación de chat con identidad de clientes, eventos y notificaciones, cliente en el navegador y servidor en Node.js. Después se vuelve a implementar con SockJS, Socket.IO y Pusher para comparar las opciones de compatibilidad.
Demonio de precios con STOMP y RabbitMQ
Servidor que implementa STOMP 1.0 sobre WebSocket y se conecta a RabbitMQ para distribuir precios de acciones. También incluye un cliente de eco con el plugin Web-Stomp.

