2

私は twittertrend.net の開発者です。curl_multi を実行する以外に、URL のヘッダーを取得するより高速な方法があるかどうか疑問に思っていました。私は 1 分間に 250 以上の URL を処理していますが、PHP の観点からこれを行うための非常に高速な方法が必要です。bash スクリプトを使用して、ヘッダーまたは C アプリケーションを出力できますが、高速化できるものはありますか? 私は主に PHP でしかプログラミングしたことがありませんが、学ぶことはできます。現在、CURL_MULTI (一度に 6 つの URL が提供される) は問題なく機能しますが、より高速なものを使用したいと思いますか? 最終的には、MySQL の保存と処理には PHP を使い続けたいと考えています。

ありがとう、ジェームズ・ハーティグ

4

7 に答える 7

2

最近、curl_multi を高速化する方法に関するブログ記事を書きました。基本的に、私は各リクエストが終了するとすぐに処理し、キューを使用して一度に多数のリクエストを処理します。私はこの手法でうまくいき、毎分最大 6000 の RSS フィードを処理するために使用しています。これが役立つことを願っています!

http://onlineaspect.com/2009/01/26/how-to-use-curl_multi-without-blocking/

于 2009-01-27T01:42:25.217 に答える
1

URLのヘッダーを取得する最も簡単な方法は、get_headers()を使用することです。パフォーマンスに関しては、curl_multiに勝るものはないと思いますが、ベンチマークを試してみてください。わかりにくいです。

于 2008-12-11T22:24:41.347 に答える
1

re:threading-via-bash-scriptは可能ですが、可能性は低いです。そのようなスクリプトのプロセス作成オーバーヘッドは、おそらく速度を低下させます。

そのインポートである場合は、そのような解決のみを行うデーモンを起動してから、ローカルでデーモンに接続します。次に、CやC ++などで、そのデーモンをできるだけ速く実行するように作業できます。

于 2008-12-11T22:32:52.123 に答える
1

curl_multi +これらのオプションは、おそらく最善の策です。

curl_setopt ($ch, CURLOPT_HEADER, 1);
curl_setopt ($ch, CURLOPT_NOBODY, 1);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);

他の唯一のオプションは、wgetをで使用することかもしれません

--server-response

次に、C / C ++、Javaなどを使用してマルチスレッド化します。これが最終的にはより高速なオプションになるとは思いません。

于 2008-12-11T22:36:09.903 に答える
1

マルチプロセスのバッチ URL 取得デーモンが必要だと思います。PHP はマルチスレッドをサポートしていませんが、複数の PHP デーモン プロセスの生成を妨げるものは何もありません。

そうは言っても、PHP に適切なガベージ コレクターがないということは、実行時間の長いプロセスでメモリ リークが発生する可能性があることを意味します。

php プログラムの多くのインスタンス (構成可能ですが制御された数) を生成するデーモンを実行します。これはもちろん、ワーク キューを読み取り、URL を取得し、複数の方法で結果を書き出すことができる必要があります。プロセスセーフ; 複数の proc が同じ作業を行おうとしてはいけません。

これらすべてを Web サーバーからではなく、デーモンとして自律的に実行する必要があります。本当。

于 2008-12-12T05:27:09.900 に答える
0

本当に低レベルのものに入るのを気にしないのであれば、ソケット関数を使用してパイプライン化された生のHTTP1.1リクエストを送信できます。

ネットワーク、CPUなど、現在使用しているもののどこにボトルネックがあるかを知ることは役に立ちます。

于 2008-12-11T22:29:53.533 に答える
0

了解しました。get_headers=URLあたり.0606秒cURL=URLあたり.01235gethostbynamel=URLあたり.001025秒

私がやろうとしていることは、最初にgethostbynamel()を実行し、次にcURLを実行することです。これにより、ホストが常に解決されるため、時間が短縮され、cURLがURLのロードでスタックする必要がなくなります。

異議はありますか?

于 2008-12-12T01:54:32.107 に答える