2015-02-19 24 views
13

Ich muss ständig auf einen Server zugreifen, um Echtzeitdaten von Finanzinstrumenten zu erhalten. Der Preis ändert sich ständig und ich muss alle 0,5 Sekunden neue Preise verlangen. Die REST-APIs der Broker lassen mich dies tun, aber ich habe bemerkt, dass es einige Verzögerungen gibt, wenn man sich mit dem Server verbindet. Ich habe gerade bemerkt, dass sie auch eine Websocket-API haben. Nach dem, was ich gelesen habe, haben sie beide einige Vorteile/Nachteile. Aber für was ich machen möchte und weil Geschwindigkeit hier besonders wichtig ist, welche Art von API würdest du empfehlen? Ist Websocket wirklich schneller?websocket vs Rest API für Echtzeitdaten?

Vielen Dank!

+0

Die Geschwindigkeit der Operation würde vollständig vom Server abhängen. Die einzige Antwort ist, beide zu versuchen und zu sehen, was am besten für Ihre Anwendung funktioniert. –

+2

Ich weiß nicht, warum die Leute das als "meinungsbasiert" abschließen. Es gibt gute, logische faktenbasierte Gründe, warum ein webSocket eine bessere Wahl für die Bereitstellung von Echtzeitdaten an einen Client als ein AJAX-Aufruf mit REST ist. Dies ist keine Meinung - in der Tat ist es ziemlich genau, warum WebSockets entwickelt wurden, um dieses Problem besser zu lösen als Ajax-Aufrufe. Alle Fragen zu A sind besser als B sind nicht primär meinungsbezogen. Viele können mit Fakten, Logik und Referenzen beantwortet werden, die nicht primär Meinungen sind. – jfriend00

+12

Abstimmung zum erneuten Öffnen. Diese Frage kann beantwortet werden, ohne dass die Antwort "primär eine meinungsbasierte Antwort" ist. Manche Leute hier sind viel zu schnell, um etwas zu schließen, das einfach fragt, ob A besser ist als B, ohne zu verstehen, ob die Antwort mit Fakten, Logik und Referenzen und nicht nur mit Meinungen versehen werden kann. Sehen Sie sich die eine Antwort unten an und fragen Sie sich, ob diese Antwort "hauptsächlich eine Meinung" ist. Ich denke nicht. Es basiert auf Fakten, einem Verständnis davon, wie die beiden Optionen funktionieren und wie sie auf das gestellte Problem angewendet werden können. – jfriend00

Antwort

22

Die effizienteste Operation für das, was Sie beschreiben, wäre eine WebSocket-Verbindung zwischen Client und Server zu verwenden und den Server aktualisierte Preisinformationen direkt über das webSocket direkt an den Client senden, wenn sich der Preis um einen nennenswerten Betrag ändert wenn eine minimale Zeit verstrichen ist und der Preis sich geändert hat.

Dies könnte viel effizienter sein, als der Kunde ständig nach neuen Preisänderungen zu fragen, und der Zeitpunkt, zu dem die neuen Informationen an den Kunden gelangen, kann aktueller sein.

Also, wenn Sie daran interessiert sind, wie schnell die Informationen auf einem neuen Preisniveau an den Client gelangt, kann ein WebSocket es dort viel aktueller, weil der Server einfach die neuen Preisinformationen direkt an den Client senden kann sehr Moment es ändert sich auf dem Server. Während ein REST-Aufruf verwendet wird, muss der Client in einem bestimmten Zeitintervall abfragen und erhält immer nur neue Daten zum Zeitpunkt des Abfrageintervalls.

Ein webSocket kann auch schneller und einfacher für Ihre Netzwerkinfrastruktur sein, weil einfach weniger Netzwerkvorgänge erforderlich sind, um ein Paket über eine bereits geöffnete webSocket-Verbindung zu senden, anstatt eine neue Verbindung für jeden REST/Ajax-Aufruf zu erstellen. Schließen Sie dann die Verbindung. Wie viel Unterschied/Verbesserung das in Ihrer speziellen Anwendung macht, wäre etwas, das Sie messen müssten, um es wirklich zu wissen.

Aber WebSockets wurden entwickelt, um mit Ihrem spezifischen Szenario zu helfen, wo ein Client (so nah an Echtzeit wie praktisch) wissen möchte, wenn sich etwas auf dem Server ändert, also würde ich definitiv denken, dass es das bevorzugte Entwurfsmuster wäre für diese Art der Nutzung.


Hier ist ein Vergleich der Netzwerkoperationen beteiligt, eine Preisänderung über ein bereits geöffneten WebSocket Senden einen REST-Aufruf gegen machen.

WebSocket

  1. Server sieht, dass ein Preis geändert hat und sendet sofort eine Nachricht an jeden Kunden.
  2. Client erhält die Nachricht über neuen Preis.

Erholung/Ajax

  1. -Client setzt einen Abfrageintervall
  2. Beim nächsten Abfrageintervall Trigger nach oben, Client erstellt Socket-Verbindung zum Server
  3. Server empfangen Anfrage neuen Sockel zu öffnen
  4. Wenn eine Verbindung mit dem Server hergestellt wird, sendet der Client eine Anfrage nach neuen Preisinformationen an den Server
  5. Der Server empfängt eine Anfrage für neue Preisinformationen und sendet eine Antwort mit neuen Daten (falls vorhanden).
  6. Kunde erhält neue Preisdaten
  7. Client-Socket
  8. Server Socket empfängt der Nähe

Wie Sie in der Erholung/Ajax Anruf von einem Netzwerk-Sicht mehr los viel zu sehen gibt es schließt, weil Für jeden neuen Anruf muss eine neue Verbindung hergestellt werden, während der webSocket einen bereits geöffneten Anruf verwendet. In den Fällen von webSocket sendet der Server dem Client nur dann neue Daten, wenn neue Daten verfügbar sind - der Client muss sie nicht regelmäßig anfordern.

Wenn sich die Preisinformationen nicht sehr oft ändern, wird das REST/Ajax-Szenario auch häufig "do-nothing" -Aufrufe haben, bei denen der Client ein Update anfordert, aber keine neuen Daten vorliegen. Der webSocket-Fall hat diesen verschwenderischen Fall nie, da der Server nur neue Daten sendet, wenn diese verfügbar sind.

+0

Vielen Dank, das hilft wirklich! –