12

コード内のさまざまな場所からHTTPgetリクエストを送信するNodeJSアプリがありますが、依存しているものもあります(リクエストの送信、応答の待機、処理、および別のリクエストの送信結果に基づく)。リクエストのレートを制限する必要があります(たとえば、1時間あたり10リクエスト)。

リクエストをキューに入れてから、ある中心点で制御された方法でそれらを解放することを考えましたが、コールバック関数とその依存パラメーターをキューに入れる方法に行き詰まりました。

アプリの最小限の再構築でこのシナリオを克服する方法の提案を聞いてうれしいです。

ありがとう

4

3 に答える 3

8

あなたはすでにあなたの質問に答えていると思います。リクエストを調整できる中央キューが最適です。ここでの唯一の問題は、使用する必要があるリクエストとコールバックの完全な情報がキューに含まれている必要があることです。QueueableRequestこれを次のようなオブジェクトに抽象化します。

var QueueableRequest = function(url, params, httpMethod, success, failure){
  this.url = url;
  this.params = params;
  ...

}
//Then you can queue your request with

queue.add(new QueueableRequest({
  "api.test.com",
  {"test": 1},
  "GET",
  function(data){ console.log('success');},
  function(err){ console.log('error');}
}));

もちろん、これはもっときれいなサンプル コードにすぎませんが、全体像を理解していただければ幸いです。

于 2012-05-26T21:25:37.733 に答える
2

Asyncモジュールには、役立つ多数の制御フロー オプションがあります。queue同時実行を制限できる場合に適しているように思えます。

于 2012-05-27T14:36:07.523 に答える
0

Deferredsを使用して、キューに入れられたリクエストごとに1つ返します。次に、キューに入れられた後、遅延プロミスに成功/失敗コールバックを追加できます。

var deferred = queue.add('http://example.com/something');
deferred.fail(function(error) { /* handle failure */ });
deferred.done(function(response) { /* handle response */ });

ペアをキューに保持することができ[ url, deferred ]、URLをデキューするたびに、それに付随するDeferredもあります。これは、リクエストの処理後に解決または失敗する可能性があります。

于 2012-05-26T21:14:45.290 に答える