2017-11-30 26 views
0

タイトルごとに、Getリクエストの最大数はありますか?Getリクエストの最大数はありますか?

ウェブページにデータを動的に読み込むために、残りのAPIにリクエストを100回送信する必要がありますが、私がPromise.All配列を作成して、要求タイムアウトのために未定義になる

これは接続数の制限によるものですか。多数の同時リクエストを作成するベストプラクティスはありますか?

あなたの洞察に感謝します!

+0

https:// stackoverflow。com/questions/985431/max-parallel-http-connections-a-browser – Amerrnath

+0

これはあなたのコントロールの範囲外です。それは完全にAPIサーバーに依存します。彼らは限界をもたらすかもしれない。 – marekful

+0

ブラウザには、最大1つのホストへの同時接続がありますが、ブラウザは通常、リクエストをキューに入れます。もし 'undefined'を取得しているなら、あなたのヒットしているAPI一種のレート制限?エラーが発生しないようにリクエストをレート制限する必要があります –

答えて

0

受信側のサーバーには、同時に処理できる要求の数がいくつかあります。サーバーの構成、サーバーソフトウェアのアーキテクチャ、送信される要求の種類など、全体の数に応じて少数または非常に多くの数になる可能性があります。

タイムアウトが発生している場合は(クライアントまたはサーバーのいずれかで)要求タイムアウトが設定される前に、サーバーがそれらのすべてを処理できないという十分な要求を送信している可能性があります。したがって、タイムアウトエラーが発生します。

クライアントでこれを処理する通常の方法は、一度に送信する同時要求数を制御し、次に1つが終了すると次のように送信するなどです。受信サーバーの機能が何であるかを調べるためにテストしなければなりません。そして、要求が実行されている間に他のソースからの他の負荷を実行できるようにするために、それから少しをバックオフする必要があります。

あなたの要求がサーバー上で異常に重いものではないと仮定すると、私は通常、一度に5または10個の要求をテストし、受信側のサーバーがその処理方法を確認します。

ここにこれを制御するためのオプションの多くの議論があります:

Promise.all consumes all my RAM

Make several requests to an API that can only handle 20 request a minute

同時実行制御もPromise.map() in the Bluebird promise libraryの一部です。

Getリクエストの最大数はありますか?

サーバーは、さまざまな理由で一度に処理できるリクエスト数に制限があります。すべてのサーバー設定は異なる可能性があります。また、送信するリクエストの種類(および実行する必要があるもの)によっても異なります。一部のサーバーでは、何十万というリクエストを処理できるかもしれません(おそらく、それらの後ろにクラスターがあり、大きな負荷のために構成されているからです)。小さな構成では、一度に数十件しか処理できません。

これは接続数の制限によるものですか。

すべての受信サーバーには、受信できる接続の数に制限があります。それが何であるかは、多くの要因に左右され、その限界が何であるかを正確に知る方法はありません(外部から)。タイムアウトエラーは、通常、この制限に達することを意味しません。

関連する問題