マルチでcurl_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 リクエストで実際に curl_multi_exec を何回呼び出す必要があるかということです。転送されるデータの小さなビットごとに呼び出す必要がありますか? 多くのCPUを使用していますが、「ビジーループ」が多すぎるためだと思います。それで、sleep(5); を追加できますか? 各ループの最後に使用する CPU サイクルを少なくするか、またはこれによりリクエストが大幅に遅くなりますか?
curl_multi_select を使用しますが、複数の curl_multi_exec が処理されているため使用できません。