2016-04-14 8 views
0

Wie viele gleichzeitige Anfragen kann ich mit dem request Paket machen? Ich erwarte Daten zurück von jeder Anfrage bestätigt, dass die Anfrage erhalten und erfolgreich verarbeitet wurde. Ist diese Hardware oder Betriebssystem abhängig? Wo fange ich an?In Knoten js. Wie viele gleichzeitige Anfragen kann ich mit dem "Anfrage" Paket senden?

+0

Sind alle Anfragen an denselben Host gesendet? Und ungefähr wie viele senden Sie gleichzeitig? Und welche Ergebnisse bekommst du? Diese Frage ist ein bisschen theoretisch. Warum füllen Sie nicht Ihre spezifischen Daten aus, damit wir Ihre spezifische Situation direkter angehen können? – jfriend00

+0

Was bedeutet das: *** Ich erwarte Daten von jeder Anfrage mit Bestätigung der Anfrage erfolgreich durchlaufen. Ist diese Hardware oder Betriebssystem abhängig? *** Jede Anfrage, die Sie senden, sollte eine Antwort irgendeiner Art erhalten oder einen Fehler zurückgeben, dass sie den Host nicht kontaktieren konnte. Dies ist in keiner Weise vom Betriebssystem abhängig. Sie werden entweder einen Fehler bei der Kontaktaufnahme mit dem Server bekommen oder Sie erhalten eine Antwort vom Server, es sei denn, Ihr eigener Code ignoriert Fehler. – jfriend00

+0

Alle Anfragen gehen zum selben Host. Ich möchte Millionen gleichzeitig senden und dann die Antwort von jedem verarbeiten, also brauche ich mein Programm, um auf die Antwort "zu warten". Es muss eine Grenze geben für wie viele ich machen und warten kann. –

Antwort

1

Eine der neueren Versionen von node.js erzwingt keine Beschränkung für ausgehende Anforderungen (ältere Versionen). Wenn Sie buchstäblich Millionen von ausgehenden Verbindungen zur gleichen Zeit herstellen wollten, würden Sie wahrscheinlich ein Limit auf Ihrem eigenen node.js-Server erreichen, der OS-spezifisch wäre. Das praktische Limit wird jedoch eher vom Zielhost bestimmt.

Da alle Ihre Anfragen an denselben Host gesendet werden, wird das wahrscheinlichere Limit von dem Server bestimmt, an den Sie die Anfragen richten. Es wird eine Art Grenze dafür geben, wie viele gleichzeitige Anfragen es "in-flight" gleichzeitig haben kann, bevor es anfängt, neue Verbindungen zu verweigern. Was diese Nummer ist, hängt vollständig davon ab, wie der Server konfiguriert und aufgebaut wird. Für http://www.google.com ist die Anzahl wahrscheinlich Hunderttausende oder Millionen von Anfragen, da sie eine riesige Serverfarm haben und die Anfragen über alle verteilt sind. Für einige einfache Single-CPU-Server wäre das Limit natürlich viel kleiner.

Darüber hinaus wird es wenig sinnvoll sein, zigtausend Anfragen an einen einzelnen CPU-Server zu senden, weil es sowieso nicht in der Lage ist, alle gleichzeitig zu bearbeiten.

Wenn Sie also wissen möchten, was für einen bestimmten Zielhost am besten funktioniert, müssen Sie einen einstellbaren Testkabelbaum einrichten, damit Sie Szenarios testen können, in denen Sie von 1, 2, 5, 10, 50 senden. 100, 200, 500, 1000 gleichzeitig und sehen Sie, wie hoch die durchschnittliche Antwortzeit ist und wo Fehler auftreten (falls vorhanden).

Wenn Sie diese Art von Tests nicht durchführen möchten, dann ist eine vernünftig sichere Wahl, die nicht versucht, die Dinge vollständig zu optimieren, darin, nicht mehr als 5 Anfragen gleichzeitig zu fliegen.

Sie können entweder selbst etwas erstellen, um N Anfragen im Flug zu verwalten, oder Sie können eine der vorhandenen Bibliotheken verwenden, die das für Sie erledigen. Die Bluebird-Versprechen-Bibliothek hat eine concurrency Option für einige seiner Funktionen wie Promise.map(), die automatisch das für Sie für jeden von Ihnen eingestellten Nebenläufigkeitswert tun wird. Die async library hat auch etwas ähnliches.


Wenn Sie mehr spezifische Hilfe wollen den Code Crafting zu verwalten, wie viele Anforderungen im Flug sind zu einem Zeitpunkt oder eine Testumgebung für ihn zu bauen, uns für die Quelle aller Anfragen einige Code bitte zeigen Wir haben also eine Idee, wie das funktioniert (wenn es sich um eine riesige Anzahl von Anfragen oder um die Quelle der URLs handelt).

+0

@jimmyscray - Hat dies Ihre Frage beantwortet? – jfriend00

+0

Leider hat es nicht. Ich habe herausgefunden, dass da ein paar Dinge eine Rolle spielen. Einer ist der "Pool" Verbindungsschwellenwert (ich glaube, das ist auf der Anwendungsebene). Mein Linux-Server hat auch einen Port-Bereich, der die Anzahl der Verbindungen begrenzt, die ich haben kann. Und nicht zuletzt ist die Menge an Speicher, die mein Skript zuweisen kann. Ich verstehe, dass der Kunde eine gleiche Anzahl von Faktoren hat, aber wir machen die Annahme, dass der Client eine unbegrenzte Anzahl von Verbindungen hat. –

+0

@JimmyScray - Nun, Sie haben sehr wenig Details über Ihre spezifischen Umstände aufgenommen, so dass es unmöglich ist, Sie zu diesen Themen zu beraten . Wenn Sie detaillierter angeben, was Sie wissen möchten und was Ihre lokale Konfiguration ist, erhalten Sie spezifischere Antworten. Zum Beispiel kann es einen Unterschied machen, ob alle Ihre Verbindungen zu demselben Host oder zu verschiedenen Hosts sind. Und natürlich gibt es Ressourcengrenzen, in denen Sie leben müssen (Speicher, Sockets, etc ...). Das ist oft Konfigurations- und Betriebssystemspezifisch, so dass es Ihnen wiederum unmöglich ist, spezifische Zahlen zu geben. – jfriend00

Verwandte Themen