Tout serveur unique moderne est capable de servir des milliers de clients à la fois . Son logiciel de serveur HTTP doit juste être orienté Event-Driven (IOCP) (nous ne sommes plus dans l'ancien Apache une connexion = une équation thread / processus). Même le serveur HTTP intégré à Windows (http.sys) est orienté IOCP et très efficace (fonctionnant en mode noyau). De ce point de vue, il n'y aura pas beaucoup de différence au niveau de la mise à l'échelle entre les WebSockets et la connexion HTTP standard. Une connexion TCP / IP utilise peu de ressources (beaucoup moins qu'un thread) et les systèmes d'exploitation modernes sont optimisés pour gérer de nombreuses connexions simultanées: WebSockets et HTTP ne sont que des protocoles de couche application OSI 7, héritant de ces spécifications TCP / IP.
Mais, par expérience, j'ai vu deux problèmes principaux avec les WebSockets:
- Ils ne prennent pas en charge CDN;
- Ils ont des problèmes de sécurité potentiels.
Je recommanderais donc ce qui suit, pour tout projet:
- Utilisez les WebSockets uniquement pour les notifications client (avec un mécanisme de secours pour l'interrogation longue - il y a beaucoup de bibliothèques autour);
- Utilisez RESTful / JSON pour toutes les autres données, en utilisant un CDN ou des proxies pour le cache.
En pratique, les applications WebSockets complètes ne s'adaptent pas bien. Utilisez simplement les WebSockets pour ce pour quoi ils ont été conçus: pousser les notifications du serveur vers le client.
À propos des problèmes potentiels liés à l'utilisation des WebSockets:
1. Pensez à utiliser un CDN
Aujourd'hui (près de 4 ans plus tard), la mise à l'échelle du Web implique l'utilisation des frontaux du Content Delivery Network (CDN), non seulement pour le contenu statique (html, css, js) mais également pour les données de votre application (JSON) .
Bien sûr, vous ne mettrez pas toutes vos données sur votre cache CDN, mais dans la pratique, beaucoup de contenu commun ne changera pas souvent. Je soupçonne que 80% de vos ressources REST peuvent être mises en cache ... Même un délai d'expiration CDN d' une minute (ou 30 secondes) peut être suffisant pour donner à votre serveur central un nouveau live et améliorer considérablement la réactivité de l'application, car CDN peut être géographiquement à l'écoute ...
À ma connaissance, il n'y a pas encore de support WebSockets dans CDN, et je soupçonne que cela ne le serait jamais. Les WebSockets ont un état complet, alors que HTTP est sans état, il est donc beaucoup plus facile à mettre en cache. En fait, pour rendre WebSockets compatible CDN, vous devrez peut-être passer à une approche RESTful sans état ... qui ne serait plus WebSockets.
2. Problèmes de sécurité
Les WebSockets présentent des problèmes de sécurité potentiels, en particulier à propos des attaques DOS. Pour une illustration sur les nouvelles vulnérabilités de sécurité, consultez cet ensemble de diapositives et ce ticket de kit Web .
Les WebSockets évitent toute chance d'inspection des paquets au niveau de la couche application OSI 7, ce qui est aujourd'hui assez standard dans toute sécurité d'entreprise. En fait, WebSockets rend la transmission obscurcie, ce qui peut donc être une violation majeure de la fuite de sécurité.