2012-01-16 1 views
1

1か月に約500,000人までのクローリングエンジンがあります。私たちは現在、ウェブページを取得するためにカールを使用しています。私たちは最近、マルチエグゼクティブを使ってページを同時にクロールしました。私たちは同時に20ページのようにそれをクロールするように設定しました。複数のクローリング問題を巻きます

ウェブページを取得するプロセス中に、カールは20ページすべてが取り込まれるまで完全に停止し、次の20ページに移動します。その1ページがフェッチされてからカールが遅れる次の20ページになる次のループに移動するまでそのページがロードされます。

これを克服する他の方法はありますか?私の質問がはっきりしていることを願っています私はちょうど画像のカールが同時に20ページをフェッチしているわけ克服して、後で

。フェッチされたものは即座に新しい20のアイテムに置き換えられ、20個すべてが終了するのを待たずにフェッチされます。クリア?

+0

タイムアウト設定を探していますか? –

+0

@Pekka - ok私はもう少し質問を明確にします。 –

+0

@Pekka: 'CURLOPT_CONNECTTIMEOUT'と' CURLOPT_TIMEOUT'を使って試しましたが、まだいくつかのページが非常に長い時間読み込まれています。問題を理解するためにそれをまだデバッグしていない。 – Ranty

答えて

1

確かに、完了したら新しいURLで新しいハンドルを追加してください。最初に20のすべてが完了するのを待つ必要はありません。それは単に非効率的です。

そして、あなたはむしろことをしたい場合は、もちろん200または600または任意に20をバンプすることができます...

は、マルチインターフェースはCレベルでどのように動作するかの概要についてはhttp://curl.haxx.se/libcurl/c/libcurl-multi.htmlを参照してください。 PHP/CURL APIは上のほんの薄いレイヤーです。

PHPでは、curl_multi_exec()は、1つ以上の転送が完了すると減少する「実行中のハンドル」のカウンタを返します。 curl_multi_info_read()を呼び出して、完了した転送とその個々の戻りコードを正確に把握することもできます。

+0

どのように完成したのか分かりましたか?それはどんな出来事も起こさない。 –

+0

私はそれをカバーする説明を拡張しました –

関連する問題