En la entrada del blog «NGINX como proxy de WebSocket» explicamos cómo usar NGINX como proxy para servidores de aplicaciones WebSocket. En esta entrada analizaremos algunas cuestiones de arquitectura e infraestructura que deben tenerse en cuenta al crear aplicaciones en tiempo real con WebSocket, incluidos los componentes necesarios y cómo estructurar los sistemas.
WebSocket añade interactividad a HTTP
HTTP funciona bien para aplicaciones web basadas en solicitudes y respuestas, en las que el flujo de comunicación siempre comienza cuando el cliente inicia una solicitud a la que responde un servidor backend. Las aplicaciones web con una interacción más dinámica y basada en mensajes entre el cliente y el servidor necesitan algo más que el simple HTTP. Los intentos anteriores de simular una comunicación bidireccional simultánea a través de HTTP eran complejos y presentaban numerosos inconvenientes. El protocolo WebSocket, junto con la interfaz JavaScript de WebSocket, ofrece una forma mucho más sencilla de crear este tipo de aplicaciones, al tiempo que reduce la cantidad de datos transferidos y la latencia.
La posibilidad de crear una conexión de socket dúplex completa entre el cliente y el servidor permite desarrollar aplicaciones web en tiempo real basadas en eventos que utilizan comunicaciones push, sondeo o streaming. Con WebSocket, tanto el cliente como el servidor pueden iniciar la comunicación una vez establecida la conexión. Esto permite crear muchos tipos de aplicaciones web, como juegos en línea, chats, seguimiento de cotizaciones bursátiles e información en tiempo real sobre resultados deportivos.
Otro caso de uso de WebSocket es el desarrollo de aplicaciones basadas en WebRTC. WebRTC se utiliza para crear aplicaciones que permiten la comunicación entre navegadores. Requiere un canal de señalización independiente para establecer las comunicaciones, y WebSocket es un protocolo adecuado para ello.
Requisitos técnicos para una aplicación WebSocket
La infraestructura mínima necesaria para una aplicación web WebSocket consiste en un navegador cliente que ejecute una aplicación JavaScript WebSocket y se comunique con un servidor WebSocket. Las versiones recientes de los principales navegadores ya son compatibles con WebSocket, pero es importante asegurarse de que los clientes dispongan de un navegador compatible. Existen muchas opciones de servidores WebSocket; a continuación se muestran algunos ejemplos para distintos entornos (esta lista se proporciona para su comodidad y no implica que NGINX, Inc. los recomiende):
Escalado de WebSocket para grandes volúmenes de tráfico
Es posible utilizar un único servidor WebSocket, pero el rendimiento de la aplicación está limitado por la capacidad del servidor, que además constituye un único punto de fallo. Muchas aplicaciones en tiempo real se desarrollan con la esperanza de lograr una adopción generalizada, pero puede resultar difícil predecir el ritmo de crecimiento. Para hacer frente a la creciente popularidad de una aplicación en tiempo real, la infraestructura debe ser capaz de:
- Escalar para admitir un gran número de usuarios simultáneos
- Ofrecer una latencia baja al gestionar las comunicaciones entre el cliente y el servidor
- Admitir una alta disponibilidad (lo que implica que no existe ningún punto único de fallo)
- Permitir que la configuración se pueda modificar fácilmente y adaptar a condiciones cambiantes
Esto se puede conseguir colocando NGINX delante de los servidores WebSocket y HTTP (ya que la mayoría de las aplicaciones WebSocket también utilizan HTTP), para que actúe como proxy inverso compatible con WebSocket y equilibrador de carga. No todos los proxies inversos ofrecen compatibilidad directa con WebSocket. Algunos, como Elastic Load Balancing (ELB) en el entorno de Amazon Web Services (AWS), deben ejecutarse en modo TCP, lo que significa que no pueden gestionar las cabeceras HTTP. El Protocolo Proxy se desarrolló para solventar esta limitación y NGINX también lo admite, por lo que WebSocket es totalmente compatible con AWS. El uso de NGINX como proxy inverso de WebSocket aporta ventajas adicionales, como flexibilidad de enrutamiento y la posibilidad de que NGINX finalice las conexiones SSL.
Una configuración típica de WebSocket con NGINX podría ser similar a esta:

Aquí mostramos diversos clientes de escritorio y móviles que se conectan a un par de servidores NGINX de alta disponibilidad, los cuales distribuyen la carga entre un conjunto de servidores HTTP y WebSocket. Este tipo de configuración puede soportar el fallo de un servidor WebSocket o NGINX, y permite añadir o eliminar servidores WebSocket fácilmente. Además, todos los detalles de enrutamiento para conectarse a los servidores WebSocket permanecen ocultos para los clientes, lo que proporciona una infraestructura sólida y escalable para aplicaciones WebSocket. El rendimiento y la fiabilidad de la web son fundamentales para las aplicaciones web en tiempo real. Póngase en contacto con nosotros hoy mismo para descubrir cómo NGINX Plus puede ayudarle a mejorar el rendimiento, la fiabilidad y la disponibilidad de sus aplicaciones.
Para obtener más información, consulte:
- NGINX como proxy de WebSocket
- Rendimiento de WebSocket en NGINX
- Proxy inverso de WebSocket en nginx.org
- Comparación de funcionalidades de NGINX y NGINX Plus
- Especificaciones técnicas de NGINX Plus
Sobre el autor

Artículos relacionados del blog
Únete a F5 NGINX en AppWorld 2024
Descubre las numerosas razones para asistir al evento insignia de F5, que incluirá un emocionante anuncio sobre la cartera de productos NGINX.
Rotación de certificados SSL/TLS sin reinicios en NGINX Open Source
La función de diccionario compartido permite configurar NGINX sin necesidad de reiniciarlo al renovar los certificados SSL/TLS.
Exposición de APIs en Kubernetes
La unidad 2 de Microservices March 2022 se centra en cómo exponer tus API en Kubernetes. Aquí tienes enlaces a los recursos que necesitas: la retransmisión en directo del 14 de marzo, artículos de blog y otros recursos de preparación, y el laboratorio práctico «Protege las API de Kubernetes mediante la limitación de solicitudes».
NGINX Sprint 2.0: visión clara, código renovado y nuevos compromisos con el código abierto
Hoy, en NGINX Sprint 2.0, anunciamos cómo respaldaremos nuestra visión del futuro de las aplicaciones modernas con una mayor presencia en la comunidad de código abierto, incluida la participación en el proyecto comunitario Kubernetes, nuevos proyectos de software de código abierto y la arquitectura de referencia para aplicaciones modernas.
Presentamos NGINX Plus R22
NGINX Plus R22 incorpora nuevas funcionalidades, como la compatibilidad con OCSP para verificar la revocación de certificados en TLS mutuo, el uso de varios proveedores de identidad OIDC en una configuración, el seguimiento en tiempo real de la limitación de solicitudes y conexiones en el panel de NGINX Plus y mejoras en NGINX JavaScript.
Presentamos NGINX Plus R17
NGINX Plus R17 incorpora compatibilidad con la limitación de velocidad en dos fases y con TLS 1.3, la versión más reciente del protocolo Transport Layer Security. La configuración de OpenID Connect es más sencilla y NGINX ModSecurity WAF es el doble de rápido que antes. También se ha actualizado el módulo JavaScript de NGINX.