2016-07-14 12 views
1

Ich mache ein kleines Projekt, in dem ein Benutzer eine HTTP-Anfrage an meinen Server macht, nach der ich einige Daten von drei verschiedenen Servern erhalte und verarbeite und dann das aufsummierte Ergebnis zurückgebe an den Client.Nodejs wie man mehrere parallele Anfragen im Falle des Blockierens bearbeitet

Alles funktioniert gut akzeptieren, wenn mehr als zwei Clients gleichzeitig Anfragen stellen, alle Clients sind nicht in der Lage, Antwort und Gesichter Timeout-Fehler zu erhalten.

Wie mit dieser Sache umzugehen.

Vielen Dank im Voraus

+0

Sie sollten nicht bloking Anfragen in node.js machen es soll async sein standardmäßig. Sie können einen Load Balancer hinzufügen, wenn Sie Blokiervorgänge ausführen müssen, aber es ist besser, zu asynchronen Switches zu wechseln. Möchten Sie mehr über Ihren Fall erfahren? Vielleicht ein Code? – sielakos

+0

Die Anforderung, die an drei verschiedene Server gestellt wird, ist asynchron, aber ihr Ergebnis muss verarbeitet und aufsummiert werden, bevor sie an den Benutzer gesendet wird. Gibt es einen anderen Weg, dies zu tun? – user3647026

+0

Also, ich nehme an, dass das nur eine Menge Zeit in Anspruch nimmt, um das zu "summieren"? Dann würde ich empfehlen, die Berechnung in weniger preiswerte Blöcke aufzuteilen. – sielakos

Antwort

2

Ok, ich verstehe. Ich würde empfehlen es6 Versprechen für diese Art von Sachen zu verwenden. Sie können request-promise und bluebird verwenden, um HTTP-Anforderungen an andere Server zu senden. nur

Und dann:

var rp = require('request-promise'); 
var bluebird = require('bluebird'); 

bluebird 
.all(rp('http://www.google.com'), rp('http://example.com')) 
.then(function (googleResponse, exampleResponse) { 
    // Some computation 
    return someResult; 
}) 
.then(function (previousResult) { 
    // Some more computation 
    return someResult; 
}); 

Im Grunde, was Sie wollen, ist ein Teil der Berechnung machen, Rückkehr mit dann und erlaubt Knoten zu übernehmen, dann in der nächsten dann anderen Teil der Berechnung zu tun und so weiter. Wenn Sie Ihren Prozess in wenige kleine Blöcke aufteilen, sollten Sie in der Lage sein, weniger zu blockieren.

Andere als dass Sie Knoten-Clustering Prüfung können, ist es ganz einfacher Prozess, der Sie Serverbelastung zwischen wenigen Arbeiter zu handhaben erlaubt: https://www.sitepoint.com/how-to-create-a-node-js-cluster-for-speeding-up-your-apps/