我在 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;