tutorial - ajax or websockets



Warum AJAX verwenden, wenn WebSockets verfügbar sind? (4)

Ich denke nicht, dass wir einen klaren Vergleich von Websockets und HTTP machen können, da sie keine Rivalen sind und dieselben Probleme nicht lösen.

Websockets sind eine gute Wahl für die Handhabung von langlebigen bidirektionalen Daten-Streaming in nahezu Echtzeit, während REST eignet sich hervorragend für gelegentliche Kommunikation. Die Verwendung von Websockets ist eine beträchtliche Investition, daher ist es ein Overkill für gelegentliche Verbindungen.

Sie können feststellen, dass Websockets besser funktionieren, wenn hohe Lasten vorhanden sind, HTTP ist in einigen Fällen etwas schneller, weil es Caching verwenden kann. Ein Vergleich von REST mit Websockets ist vergleichbar mit dem Vergleich von Äpfeln mit Orangen.

Wir sollten prüfen, welche eine bessere Lösung für unsere Anwendung bietet, welche in unserem Anwendungsfall am besten passt.

Ich benutze WebSockets schon seit einiger Zeit. Ich habe beschlossen, ein agiles Projektmanagement-Tool für mein Abschlussjahrprojekt an der Universität unter Verwendung von Knotenservern und WebSockets zu erstellen. Ich stellte fest, dass die Verwendung von WebSockets die Anzahl der Anfragen pro Sekunde um 624% erhöhte, die meine Anwendung verarbeiten konnte.

Seit dem Start des Projekts habe ich jedoch Sicherheitslücken gelesen und einige Browser haben WebSockets standardmäßig deaktiviert.

Dies führt mich zu der Frage:

Warum sollte AJAX verwendet werden, wenn WebSockets die Latenz und den Ressourcenaufwand so stark zu senken scheint? Gibt es irgendetwas, das AJAX besser macht als WebSockets?


Answer #1

Die meisten Beschwerden, die ich über Websockets und Sicherheit gelesen habe, stammen von Sicherheitsanbietern von Webbrowser-Sicherheit und Firewall-Sicherheitstools. Das Problem ist, dass sie nicht wissen, wie Sicherheitsanalysen von WebSockets-Datenverkehr durchgeführt werden, denn sobald das Upgrade von HTTP auf das WebSocket-Binärprotokoll erfolgt ist, ist der Paketinhalt und seine Bedeutung anwendungsspezifisch (basierend auf was auch immer Sie programmieren). Dies ist offensichtlich ein logistischer Albtraum für diese Unternehmen, deren Lebensunterhalt auf der Analyse und Klassifizierung Ihres gesamten Internetverkehrs basiert. :)


Answer #2

WebSockets ist nicht dazu gedacht, AJAX zu ersetzen und ist nicht unbedingt sogar ein Ersatz für Comet / long-Poll (obwohl es viele Fälle gibt, in denen dies sinnvoll ist).

Der Zweck von WebSockets ist die Bereitstellung einer bidirektionalen, vollduplexfähigen und lang laufenden Verbindung mit niedriger Latenz zwischen einem Browser und einem Server. WebSockets eröffnet neue Anwendungsdomänen für Browseranwendungen, die mit HTTP und AJAX nicht wirklich möglich waren (interaktive Spiele, dynamische Medienströme, Überbrückung bestehender Netzwerkprotokolle usw.).

Es besteht jedoch eine gewisse Überschneidung zwischen WebSockets und AJAX / Comet. Wenn der Browser beispielsweise über Serverereignisse (z. B. Push) benachrichtigt werden möchte, sind Comet-Techniken und WebSockets sicherlich geeignete Optionen. Wenn Ihre Anwendung Push-Ereignisse mit niedriger Latenz benötigt, wäre dies ein Faktor zugunsten von WebSockets. Wenn Sie andererseits mit bestehenden Frameworks und implementierten Technologien (OAuth, RESTful APIs, Proxies, Load Balancer) koexistieren müssen, wäre dies ein Faktor zugunsten der Comet-Techniken (vorerst).

Wenn Sie die spezifischen Vorteile, die WebSockets bietet, nicht benötigen, ist es wahrscheinlich eine bessere Idee, sich an vorhandene Techniken wie AJAX und Comet zu halten, da Sie diese wiederverwenden und in ein riesiges bestehendes Ökosystem von Tools, Technologien und Sicherheitsmechanismen integrieren können , Wissensbasen (dh viel mehr Leute auf wissen HTTP / Ajax / Comet als WebSockets), etc.

Wenn Sie jedoch eine neue Anwendung erstellen, die innerhalb der Latenz- und Verbindungsbeschränkungen von HTTP / Ajax / Comet nicht funktioniert, sollten Sie WebSockets verwenden.

Auch einige Antworten zeigen, dass einer der Nachteile von WebSockets begrenzte / gemischte Server- und Browser-Unterstützung ist. Lassen Sie mich das etwas diffundieren. Während iOS (iPhone, iPad) immer noch das ältere Protokoll (Hixie) unterstützt, unterstützen die meisten WebSockets-Server sowohl Hixie als auch die HyBi / IETF 6455- Version. Die meisten anderen Plattformen (wenn sie nicht bereits über integrierte Unterstützung verfügen) können WebSockets-Unterstützung über web-socket-js (Flash-basiertes Polyfill) erhalten. Dies deckt die überwiegende Mehrheit der Internetnutzer ab. Wenn Sie Node für das Server-Backend verwenden, sollten Sie auch Socket.IO verwenden, das web-socket-js als Fallback enthält, und wenn es nicht verfügbar (oder deaktiviert) ist, greift es auf die Comet-Technik zurück verfügbar für den angegebenen Browser.

Update : iOS 6 unterstützt jetzt den aktuellen HyBi / IETF 6455-Standard.


Answer #3

Zusätzlich zu Problemen mit älteren Browsern (einschließlich IE9, da WebSockets ab IE10 unterstützt werden) gibt es immer noch große Probleme mit Netzwerk-Intermediären, die WebSockets noch nicht unterstützen, einschließlich transparenter Proxies, Reverse-Proxies und Load-Balancer. Es gibt einige Mobilfunkanbieter, die den WebSocket-Datenverkehr vollständig blockieren (also nach dem Befehl HTTP UPGRADE).

Im Laufe der Jahre wird WebSockets mehr und mehr unterstützt, aber in der Zwischenzeit sollten Sie immer eine HTTP-basierte Fallback-Methode zum Senden von Daten an die Browser haben.





websocket