1

最近、curl で複数のリクエストを行う可能性を調べました。私はそれを完全には理解していないかもしれないので、いくつかの概念を明確にしたいと思っています。

複数のソースからコンテンツを取得している場合、これは間違いなく良いオプションです。そうすれば、低速サーバーを待機しながら、高速サーバーからの結果の処理を開始できます。同じサーバーから複数のページをリクエストしている場合でも、それを使用する意味はありますか? サーバーは、同じクライアントに対して一度に複数のページを提供しますか?

4

4 に答える 4

3

PHP ではマルチスレッド化を行うことができないため、あるページの処理を開始し、他のページがまだ取得されているということはありません。マルチカールは、すべてのページが取得されるかタイムアウトするまで制御を返しません。そのため、最も遅いページを取得するのにかかるのと同じくらい時間がかかります。シリアル (curl) からパラレル (multi_curl) に移行しますが、それでも大きな後押しが得られます。

サーバーは、特定の構成制限まで、同じクライアントに複数のページを提供します。サーバーから 5 ~ 10 ページを要求するのは問題ありません。

于 2010-02-12T22:50:34.177 に答える
1

これをチェックしてください。この男は、curl_multi と非同期で動作するスクリプトを作成しました。私はそれで数時間遊んでいますが、うまくいきます。

于 2011-12-11T00:24:50.970 に答える
0

一部のサーバーは、同じクライアントと見なされるものからあまりにも多くの接続または要求が行われた場合、防御的に動作するように構成されている場合があります。接続をドロップ/拒否したり、帯域幅をすべての接続間の合計に制限したり、その他のことを行う場合があります。

いずれにせよ、Web クローラーをサイトに追加するように配慮し、1 つのサーバーに一度に大量のデータを送信しないようにしてください。

5 つの異なるサーバーからそれぞれ 5 ページをフェッチする必要がある場合、完了するまで 1 つのサーバーに 5 つの接続を行うよりも、完了するまで各サーバーに 1 つの接続を使用する方が、はるかに速く完了する可能性があります。

于 2010-02-12T22:01:28.193 に答える
0

ほとんどまたはすべてのサーバーが、一度に複数のページを同じクライアントに提供すると考えてください。接続に適切なタイムアウトを設定し、接続に失敗した場合は、それを接続配列にプッシュして、他のすべての接続が完了した後に再試行することができます。そうすれば、常に複数取得しようとしますが、一度に少なくとも 1 つ取得できます。それは理にかなっていますか?:)

于 2010-02-12T19:02:08.830 に答える