HTTP vs WebSockets in Bezug auf Overhead

8

Ich baue ein Dateisynchronisationsprogramm (nicht anders als Dropbox) mit node.js an beiden Enden. Ich muss potentiell Tausende von Clients haben, die gleichzeitig Daten anfordern.

Hier ist mein aktuelles System:

  • Der Server sendet Benachrichtigungen an den Client über einen Websocket (die Datei wurde aktualisiert)
  • Der Client lädt die Downloads in die Warteschlange und erstellt eine HTTP-Anforderung im Leerlauf

Ich werde Daten in komprimierten Blöcken von etwa 50 MB pro Sekunde bereitstellen, daher ist der HTTP-Anforderungsoverhead (Header) vernachlässigbar.

Wenn ich websockets für Push-Benachrichtigungen für und Anfragen verwenden würde, würde ich Folgendes tun:

  • Spürbare Verbesserungen der Gesamtgeschwindigkeit? (reduzierte Latenz, Authentifizierung, etc.)
  • Zusätzlicher Overhead auf dem Server, um Verbindungen offen zu halten?
  • Probleme beim Übertragen binärer Daten?

Ich denke, dass ich Benachrichtigungen über einen dedizierten Websocket senden muss, weil ich nicht möchte, dass sie auf dem Server in die Warteschlange gestellt werden, während ein Download stattfindet (viel Overhead).

Hinweis: Diese Websockets sind langfristig geöffnet, solange das Client-System eingeschaltet ist.

EDIT: Ich werde die WebSockets auf einem anderen HTTP-Server an verschiedenen Ports verwenden, um sie auf verschiedene CPU-Kerne zu verschieben. Ich könnte potenziell Tausende (wenn nicht sogar Hunderttausende) von gleichzeitigen Websockets öffnen ...

    
tjameson 04.04.2011, 06:31
quelle

2 Antworten

5

Wenn Sie node.js sowohl für den Client als auch für den Server verwenden möchten, sollten Sie das systemeigene net verwenden Modul mit reinen Sockets statt WebSockets. Reine Sockets sind viel besser für den Datentransfer optimiert, insbesondere binär. Soweit ich weiß, Browser WebSockets unterstützen noch nicht einmal Binärübertragung.

    
yojimbo87 05.04.2011, 08:36
quelle
1

Ich habe mich nach etwas anderem umgeschaut und diesen Post gefunden, der Websockets ziemlich gut erklärt:

Ссылка

Hier sind einige ziemlich interessante Teile aus dem Artikel:

  

Websocket ermöglicht eine kontinuierliche Kommunikation mit deutlich weniger Netzwerkaufwand als bei einer bestehenden Lösung.

Und:

  

Während der Verbindung mit WebSocket tauschen Client und Server Daten pro Frame aus, die jeweils 2 Byte umfassen, im Vergleich zu 8 Kilobyte des HTTP-Headers, wenn Sie fortlaufend pollen.

Für meinen Anwendungsfall (kein Browser) scheint dies die optimale Lösung zu sein! Jetzt muss ich nur noch entscheiden, ob ich einen einzelnen Websocket oder mehrere Websockets pro Client haben möchte (ich lehne mich an einen einzelnen an).

Ich hoffe wirklich, dass das für jemanden nützlich ist. Ich werde das vorerst offen lassen. Ich werde später in dieser Woche an einer JS-Konferenz teilnehmen, und wenn ich etwas mehr lerne, werde ich diesen Beitrag hinzufügen.

Für diejenigen unter Ihnen, die sich um die Browserunterstützung kümmern, finden Sie dies . Es scheint, dass WebKit die einzige zuverlässige Engine ist, die es unterstützt (Chrome und Safari).

    
tjameson 05.04.2011 05:29
quelle