ホームページ > バックエンド開発 > PHPチュートリアル > phpカールはhttpリクエストをバッチで送信します

phpカールはhttpリクエストをバッチで送信します

WBOY
リリース: 2016-07-29 09:14:21
オリジナル
1437 人が閲覧しました

はじめに: Android 4.0 開発では、HTTP リクエストの送信はメイン プロセスで実行できなくなり、スレッドで実行する必要があります。その理由は、HTTP インターフェイスの応答時間がメイン プロセスのイベント監視をブロックする可能性があるためです (.Net 開発についても同様です)。ただし、PHP にはマルチスレッドの概念がないため、PHP で複数の http リクエストを効率的に実行するにはどうすればよいでしょうか?答えはcurl_multi_initを使うことなので実験してみました。

以下はリクエストをシミュレートする http インターフェースです。コードは非常に単純です。スリープ時間は get によって渡されるパラメーター time によって制御されます。

$s_time=intval($_GET['time']);
sleep($s_time);
echo 'hello';
ログイン後にコピー

次に、curl_initを使用するだけです。 コードは次のとおりです。

$start=microtime(true);
for($i=1;$i<=5;++$i)
{
	$ch=curl_init("http://test.binbin.com/curl/test.php?time={$i}");
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_exec($ch);
}
$end=microtime(true);
echo $end-$start;
ログイン後にコピー

実行時間は、すべてのスリープ時間の合計で約15秒です。 それでは、curl_multi_init

を使用した時間を見てみましょう。

$start=microtime(true);
$ch_list=array();
$multi_ch=curl_multi_init();
for($i=1;$i<=5;++$i)
{
	$ch_list[$i]=curl_init("http://test.binbin.com/curl/test.php?time={$i}");
	curl_setopt($ch_list[$i], CURLOPT_RETURNTRANSFER, true);
	curl_multi_add_handle($multi_ch, $ch_list[$i]);
}
$running=false;
do {
        usleep(10000);
	curl_multi_exec($multi_ch, $running);
}while ($running>0);

$end=microtime(true);
echo $end-$start;
ログイン後にコピー
。最長の http リクエストの実行時間であっても、結果はわずか 5 秒です。

追記:curl_multi_init を使用した過剰な CPU 使用率の問題をブログで報告している人がたくさんいました。実際には、usleep を追加することで解決できます。データが返されない場合、curl_multi_exec は実行を継続し、CPU リソースを消費するためです。

上記は、http リクエストをバッチで送信するための phpcurl を、関連する内容も含めて紹介しています。PHP チュートリアルに興味のある友人に役立つことを願っています。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート