Qualquer servidor único e moderno pode atender milhares de clientes de uma só vez . Seu software de servidor HTTP precisa ser orientado a IOCP (Event-Driven) (não estamos mais no Apache antigo, uma conexão = uma equação de thread / processo). Até o servidor HTTP incorporado no Windows (http.sys) é orientado para IOCP e muito eficiente (executando no modo kernel). Desse ponto de vista, não haverá muita diferença no dimensionamento entre o WebSockets e a conexão HTTP normal. Uma conexão TCP / IP usa pouco recurso (muito menos que um encadeamento) e o SO moderno é otimizado para lidar com muitas conexões simultâneas: WebSockets e HTTP são apenas protocolos da camada de aplicativo OSI 7, herdados dessas especificações TCP / IP.
Mas, por experiência, vi dois problemas principais com os WebSockets:
- Eles não suportam CDN;
- Eles têm possíveis problemas de segurança.
Então, eu recomendaria o seguinte, para qualquer projeto:
- Use o WebSockets apenas para notificações de clientes (com um mecanismo de fallback para pesquisas longas - existem muitas bibliotecas por aí);
- Use RESTful / JSON para todos os outros dados, usando uma CDN ou proxies para cache.
Na prática, os aplicativos WebSockets completos não se adaptam bem. Basta usar o WebSockets para o que eles foram projetados: notificações por push do servidor para o cliente.
Sobre os possíveis problemas do uso de WebSockets:
1. Considere usar uma CDN
Hoje (quase 4 anos depois), o dimensionamento da Web envolve o uso de front-ends da Content Delivery Network (CDN), não apenas para conteúdo estático (html, css, js), mas também para os dados do aplicativo (JSON) .
Obviamente, você não colocará todos os seus dados no cache da CDN, mas, na prática, muito conteúdo comum não será alterado com frequência. Suspeito que 80% dos seus recursos REST possam estar armazenados em cache ... Mesmo o tempo limite de expiração da CDN de um minuto (ou 30 segundos) pode ser suficiente para dar ao servidor central uma nova energia ao vivo e aprimorar muito a capacidade de resposta do aplicativo, pois a CDN pode ser ajustado geograficamente ...
Que eu saiba, ainda não há suporte para WebSockets na CDN e suspeito que nunca seria. Os WebSockets são válidos para o estado, enquanto o HTTP é sem estado, portanto, é muito facilmente armazenado em cache. De fato, para tornar o WebSockets compatível com CDN, pode ser necessário mudar para uma abordagem RESTful sem estado ... que não seria mais o WebSockets.
2. Questões de segurança
Os WebSockets têm possíveis problemas de segurança, especialmente sobre ataques do DOS. Para obter uma ilustração sobre as novas vulnerabilidades de segurança, consulte este conjunto de slides e este ticket de webkit .
Os WebSockets evitam qualquer chance de inspeção de pacotes no nível da camada de aplicativos OSI 7, que hoje em dia é bastante padrão em qualquer segurança comercial. De fato, o WebSockets torna a transmissão ofuscada, por isso pode ser uma grande violação do vazamento de segurança.