我使用curl_multi和multi來上傳文件到不同的服務器。每個服務器都有多個需要上傳的文件,所以我對每個服務器都有一個curl_multi請求。當我執行curl_multi把手,我只是執行所有的curl_multi在同一個循環來處理,就像這樣:curl_multi_exec必須被調用多少次?
<?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實際上有多少次在一個捲曲的請求被稱爲?是否需要傳輸每一點數據?它使用了很多CPU,我認爲它是因爲它的「繁忙循環」太多。所以我可以加睡覺(5);在每個循環結束時使它使用更少的cpu週期,還是這會大大減緩請求的速度?
我會使用curl_multi_select,但我不能因爲正在處理多個curl_multi_execs。