Cualquier servidor único moderno puede servir a miles de clientes a la vez . Su software de servidor HTTP tiene que estar orientado a eventos (IOCP) (ya no estamos en la antigua conexión Apache one = one thread / process ecuación). Incluso el servidor HTTP integrado en Windows (http.sys) está orientado a IOCP y es muy eficiente (se ejecuta en modo kernel). Desde este punto de vista, no habrá mucha diferencia en el escalado entre WebSockets y la conexión HTTP normal. Una conexión TCP / IP utiliza un pequeño recurso (mucho menos que un subproceso), y los sistemas operativos modernos están optimizados para manejar muchas conexiones concurrentes: WebSockets y HTTP son solo protocolos de capa de aplicación OSI 7, heredados de estas especificaciones TCP / IP.
Pero, por experimento, he visto dos problemas principales con WebSockets:
- No son compatibles con CDN;
- Tienen posibles problemas de seguridad.
Por lo tanto, recomendaría lo siguiente, para cualquier proyecto:
- Use WebSockets solo para notificaciones de clientes (con un mecanismo de reserva para sondeo largo; hay muchas bibliotecas disponibles);
- Use RESTful / JSON para todos los demás datos, usando un CDN o proxies para caché.
En la práctica, las aplicaciones completas de WebSockets no se escalan bien. Simplemente use WebSockets para lo que fueron diseñados: enviar notificaciones del servidor al cliente.
Sobre los posibles problemas del uso de WebSockets:
1. Considere usar un CDN
Hoy (casi 4 años después), el escalado web implica el uso de front-end de Content Delivery Network (CDN), no solo para contenido estático (html, css, js) sino también para los datos de su aplicación (JSON) .
Por supuesto, no colocará todos sus datos en su caché CDN, pero en la práctica, una gran cantidad de contenido común no cambiará con frecuencia. Sospecho que el 80% de sus recursos REST pueden almacenarse en caché ... Incluso un tiempo de espera de caducidad de CDN de un minuto (o 30 segundos) puede ser suficiente para darle a su servidor central una nueva vida y mejorar mucho la capacidad de respuesta de la aplicación, ya que CDN puede estar geográficamente sintonizado ...
Que yo sepa, todavía no hay soporte de WebSockets en CDN, y sospecho que nunca lo sería. Los WebSockets tienen estado, mientras que HTTP no tiene estado, por lo que se almacena en caché con mucha facilidad. De hecho, para que WebSockets sea compatible con CDN, es posible que deba cambiar a un enfoque RESTful sin estado ... que ya no sería WebSockets.
2. Problemas de seguridad
WebSockets tiene posibles problemas de seguridad, especialmente sobre los ataques de DOS. Para obtener una ilustración sobre las nuevas vulnerabilidades de seguridad, consulte este conjunto de diapositivas y este ticket del kit web .
Los WebSockets evitan cualquier posibilidad de inspección de paquetes a nivel de la capa de aplicación OSI 7, que hoy en día es bastante estándar en cualquier seguridad empresarial. De hecho, WebSockets hace que la transmisión se ofusque, por lo que puede ser una violación importante de la fuga de seguridad.