我使用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 请求中实际上需要调用curl_multi_exec 多少次?是否需要为传输的每一点数据调用它?它使用了大量的CPU,我认为这是因为它的“忙循环”太多了。那么我可以添加 sleep(5);在每个循环结束时使用更少的 cpu 周期,或者这会大大减慢请求速度吗?
我会使用curl multi_select,但我不能,因为有多个curl_multi_exec正在处理。
curl_multi_exec() 读取数据并将数据写入套接字。当无法写入或读取时它会停止。
因此,所需的调用次数取决于要传输的数据量和网络速度。 curl_multi_select() 等待套接字变得可读或可写。
您应该使用curl_multi_select()并将所有主机放在一个多句柄中。
查看卷曲获取信息() or curl_multi_info_read()如果您需要知道各个请求的持续时间。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)