マルチカールを使用するスクリプトがphpにあります。
一般的なマルチカール リクエストは、50 個の個々のカール ハンドルで構成されます。各リクエストが返されるまでに時間がかかるため、スクリプトはリモート サーバーでの処理が完了するまで待機する必要があります。
これらの 50 のリクエストのそれぞれが、必要のない大量のデータ (コンテンツ) を返します。したがって、返されたデータを無視する方が効率的です。ただし、リモート サーバーでの処理が終了したとき、つまりデータが返されたときを知る必要があります。
データを使用する必要はないが、要求を行う必要がある理由は、リモート サーバーがデータベースにデータを配置し、その後、自分のサーバーからデータを取得するためです。したがって、基本的にはこのリクエストを行うだけでよく、リモート サーバー上のスクリプトがいつ終了するかを知る必要があります。
私の質問: このリクエストは多くの CPU を消費しています。どうすれば効率化できますか?
コード:
$nrofrequests=count($variable1);
//Build multi-curl for all to scrape sites at once:
for($i=0;$i<$nrofrequests;$i++){
$post='variable1='.$variable1[$i].'&variable2='.$variable2[$i];
$url='http://www.domain.com/'.$scriptnumber[$i];
$ch[$i] = curl_init($url);
curl_setopt ($ch[$i], CURLOPT_POST, 1);
curl_setopt ($ch[$i], CURLOPT_POSTFIELDS, $post);
curl_setopt($ch[$i], CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch[$i], CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch[$i], CURLOPT_TIMEOUT, 35);
set_time_limit(35);
}
// build the multi-curl handle, adding both $ch
$mh = curl_multi_init();
for ($i=0; $i<$nrofrequests; $i ++ ):
curl_multi_add_handle($mh, $ch[$i]);
endfor;
// execute all queries simultaneously, and continue when all are complete
$running = null;
do {curl_multi_exec($mh, $running);}
while ($running);
for ($i=0; $i<$nrofrequests; $i ++ ):
curl_multi_remove_handle($mh, $ch[$i]);
endfor;