2016-07-14 18 views
1

ユーザーが自分のサーバーにhttpリクエストを送信した後、3つの異なるサーバーからデータを取得して処理して、クライアントに送信します。Nodejs複数の並列リクエストを処理する方法をブロックする

3人以上のクライアントが同時にリクエストを行うと、すべてのクライアントが応答を受信できず、タイムアウトエラーが発生します。

このことをどのように処理するか。

ありがとうございます。

+0

デフォルトではブローキング操作を行う必要がある場合はロードバランサを追加できますが、非同期操作に切り替える方がよい場合があります。あなたの事件についてもっと分かち合うためのケア多分いくつかのコード? – sielakos

+0

3つの異なるサーバーに対する要求は非同期ですが、その結果を処理して合計してからユーザーに送信する必要があります。これを行う別の方法はありますか? – user3647026

+0

だから私はこれを行うには多くの時間がかかると思う "集計"?それから私はいくつかの安価なブロックで計算を分割することをお勧めします。 – sielakos

答えて

2

よろしくお願いいたします。私はそのようなもののためにes6約束を使用することをお勧めします。 request-promisebluebirdを使用して、他のサーバーにhttp要求を行うことができます。

そしてちょうど:

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; 
}); 

は、基本的に何をしたい、計算の一部を作り、その後および買収にノードを可能と返し、その後、次の中でそのように上の計算の他の部分をやってています。プロセスを少数の小さなブロックに分割すると、ブロックする必要が少なくなります。

あなたはノードのクラスタリングをチェックアウトすることができ、それはあなたがいくつかの労働者の間でサーバーの負荷を処理することができ、非常に簡単なプロセスである以外

:あなたは非同期ことになっているのNode.jsでリクエストをbloking作るべきではありません https://www.sitepoint.com/how-to-create-a-node-js-cluster-for-speeding-up-your-apps/

関連する問題