我正在使用 curl_multi 和 multi 将文件上传到不同的服务器。每台服务器都有多个需要上传的文件,所以我对每台服务器都有一个 curl_multi 请求。当我执行 curl_multi 句柄时,我只是在同一个循环中执行所有 curl_multi 句柄,如下所示:
<?php
do {
$continue_running=false;
foreach($handles as $host => $handle) {
if(!is_resource($handle[0])) {
die("\nHandle is not a resource!\n");
}
if($running_{$host}) {
if(curl_multi_exec($handles[$host][0], $running_{$host}) != CURLM_OK) {
die("\ncurl_multi_exec failed!\n");
}
$continue_running=true;
}
if(!$running_{$host} && !$done_{$host}) {
echo "$host finished in ".(microtime(1)-$start)." seconds\n";
$done_{$host}=true;
}
}
} while ($continue_running);
?>
我想知道的是, curl_multi_exec 实际上必须在 curl 请求中调用多少次?是否需要为传输的每一点数据调用它?它使用了大量的 cpu,我认为这是因为它的“忙循环”太多了。那么我可以添加 sleep(5); 在每个循环结束时使其使用更少的 cpu 周期,或者这会大大减慢请求吗?
我会使用 curl_multi_select,但我不能,因为正在处理多个 curl_multi_execs。