node.js warten auf Antwort

7

Ich habe ein sehr begrenztes Wissen über Knoten und Nob-Blocking IO also verzeih mir, wenn meine Frage zu naiv ist.

Um benötigte Informationen im Antworttext zurückzugeben, muss ich

  • Rufen Sie die API von Drittanbietern an
  • Warte auf Antwort
  • Fügen Sie einige Änderungen hinzu und geben Sie die JSON-Antwort mit den Informationen zurück, die ich von der API erhalten habe.

Meine Frage ist ... wie kann ich auf eine Antwort warten? Oder ist es möglich, die Informationen nur dann an den Client zu senden, wenn ich eine Antwort von der API erhalten habe (soweit ich weiß, sollte die Verbindung in diesem Fall bidirektional sein, was bedeutet, dass ich dies nicht über HTTP tun kann).

>

Und noch eine Frage. Wenn eine Anfrage auf eine Antwort von der API wartet, bedeutet dies, dass andere Benutzer gezwungen sind, ebenfalls zu warten (da der Knoten single-threaded ist), bis die Anzahl der Threads / Prozesse von 1 auf N ansteigt?

    
evfwcqcg 16.01.2013, 14:30
quelle

3 Antworten

8

Sie übergeben einen Rückruf an die Funktion, die den Dienst aufruft. Wenn der Service eine Datenbank ist, zum Beispiel:

%Vor%

Und woanders im Code:

%Vor%

Oder Sie können anonyme Funktionen verwenden, also:

%Vor%

Zwischen dem Aufruf und dem Rückruf behandelt der Knoten andere Clients / Verbindungen frei, "nicht blockierend".

    
randunel 16.01.2013, 14:40
quelle
6

Diese Art von Situation ist genau das, was der Knoten lösen sollte. Sobald Sie die Anfrage von Ihrem Client erhalten haben, können Sie eine http-Anfrage machen, die einen Callback-Parameter benötigt. Dies ruft Ihre Callback-Funktion auf, wenn die Anfrage erledigt ist, aber der Knoten kann andere Arbeiten ausführen (einschließlich der Bedienung anderer Clients), während Sie auf die Antwort warten. Sobald die Anfrage abgeschlossen ist, können Sie mit dem Code die Antwort an den noch wartenden Client senden.

Die Menge an Arbeitsspeicher und CPU, die vom Knotenprozess verwendet wird, nimmt zu, wenn weitere Clients eine Verbindung mit ihm herstellen, aber nur ein Prozess ist erforderlich, um viele gleichzeitige Clients zu verarbeiten.

Der Knoten konzentriert sich darauf, langsame E / As asynchron auszuführen, so dass der Anwendungscode eine Task starten kann und dann die Codeausführung nach Abschluss der E / A erneut startet.

    
JeffS 16.01.2013 14:38
quelle
4

Ein typisches Beispiel könnte dies verdeutlichen. Wir rufen die FB API auf. Wenn wir eine Antwort erhalten, ändern wir sie und senden dann JSON an den Benutzer.

%Vor%     
almypal 16.01.2013 16:36
quelle

Tags und Links