Jeder moderne Einzelserver kann Tausende von Clients gleichzeitig bedienen . Die HTTP-Serversoftware muss nur ereignisgesteuert (IOCP) sein (wir sind nicht mehr in der alten Apache-Verbindung = eine Thread- / Prozessgleichung). Sogar der in Windows integrierte HTTP-Server (http.sys) ist IOCP-orientiert und sehr effizient (läuft im Kernel-Modus). Unter diesem Gesichtspunkt gibt es keinen großen Unterschied bei der Skalierung zwischen WebSockets und der regulären HTTP-Verbindung. Eine TCP / IP-Verbindung benötigt eine kleine Ressource (viel weniger als ein Thread), und moderne Betriebssysteme sind für die Verarbeitung vieler gleichzeitiger Verbindungen optimiert: WebSockets und HTTP sind nur Protokolle der OSI 7-Anwendungsschicht, die von diesen TCP / IP-Spezifikationen erben.
Beim Experimentieren habe ich jedoch zwei Hauptprobleme mit WebSockets festgestellt:
- Sie unterstützen CDN nicht.
- Sie haben potenzielle Sicherheitsprobleme.
Daher würde ich für jedes Projekt Folgendes empfehlen:
- Verwenden Sie WebSockets nur für Client-Benachrichtigungen (mit einem Fallback-Mechanismus für Langzeitabfragen - es gibt viele Bibliotheken).
- Verwenden Sie RESTful / JSON für alle anderen Daten, indem Sie ein CDN oder Proxys für den Cache verwenden.
In der Praxis lassen sich vollständige WebSockets-Anwendungen nicht gut skalieren. Verwenden Sie WebSockets einfach für das, wofür sie entwickelt wurden: Benachrichtigungen vom Server an den Client senden.
Informationen zu den potenziellen Problemen bei der Verwendung von WebSockets:
1. Erwägen Sie die Verwendung eines CDN
Heute (fast 4 Jahre später) umfasst die Web-Skalierung die Verwendung von CDN-Frontends ( Content Delivery Network ), nicht nur für statische Inhalte (HTML, CSS, JS), sondern auch für Ihre Anwendungsdaten (JSON) .
Natürlich werden Sie nicht alle Ihre Daten in Ihren CDN-Cache stellen, aber in der Praxis werden sich viele gängige Inhalte nicht oft ändern. Ich vermute, dass 80% Ihrer REST-Ressourcen zwischengespeichert werden können ... Selbst ein CDN-Ablaufzeitlimit von einer Minute (oder 30 Sekunden) kann ausreichen, um Ihrem zentralen Server ein neues Leben zu ermöglichen und die Reaktionsfähigkeit der Anwendung erheblich zu verbessern, da CDN dies kann geografisch abgestimmt sein ...
Meines Wissens gibt es in CDN noch keine WebSockets-Unterstützung, und ich vermute, dass dies niemals der Fall sein wird. WebSockets sind statusbehaftet, während HTTP zustandslos ist und daher sehr einfach zwischengespeichert werden kann. Um WebSockets CDN-freundlich zu machen, müssen Sie möglicherweise zu einem zustandslosen RESTful-Ansatz wechseln, bei dem es sich nicht mehr um WebSockets handelt.
2. Sicherheitsprobleme
WebSockets weisen potenzielle Sicherheitsprobleme auf, insbesondere bei DOS-Angriffen. Beispiele für neue Sicherheitslücken finden Sie in diesen Folien und in diesem Webkit-Ticket .
WebSockets vermeiden die Möglichkeit einer Paketinspektion auf OSI 7-Ebene der Anwendungsschicht, was heutzutage in jeder Unternehmenssicherheit zum Standard wird. Tatsächlich verschleiert WebSockets die Übertragung und kann daher einen schwerwiegenden Verstoß gegen das Sicherheitsleck darstellen.