[查看php.net示例和贡献者代码后,我发现有不同的方法,但是其中一些方法或者经过测试还是无法工作,或者are deprecated。通过互联网different articles建议使用不同的方法:
do {
curl_multi_exec($mh,$active);
}
while ($active > 0);
其他示例/程序员以“高级”方式使用:
do {
$mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
while ($active && $mrc == CURLM_OK) {
if (curl_multi_select($mh) == -1) {
usleep(1000);
}
else {
do {
$mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
}
}
[谁能说出curl_multi_exec
的最新和最佳用法?(顺便说一句,就我个人而言,i've found确实表现出色usleep
)
usleep()
调用不会“提高性能”。如果函数不等待任何内容而是立即返回,则可以避免出现繁忙循环。对于传输开始时的名称解析器阶段,尤其是(某些较旧的)libcurl版本可能会发生这种情况。 (将来,当CURL / PHP不再具有这种行为时,可以取消这种预防措施。)
但是您可以肯定跳过对CURLM_CALL_MULTI_PERFORM
的检查,因为libcurl自从很多年以来都没有返回过。因此,这将使它变得>>
$active = 1;
$mrc = CURLM_OK;
while ($active && $mrc == CURLM_OK) {
if (curl_multi_select($mh) == -1) {
usleep(1000);
}
else {
$mrc = curl_multi_exec($mh, $active);
}
}