我正在使用curl_multi_exec()从某些API获取数据并使用以下代码:
$startTime = microtime(true);
$running = null;
do
{
curl_multi_exec ( $curlMultiHandleResource, $running );
usleep(50000);
}
while ( $running > 0 );
$runningTime = microtime(true)-$startTime;
我设置了CURLOPT_TIMEOUT_MS = 1800和CURLOPT_CONNECTTIMEOUT_MS = 1800.在我的Windows机器上,$ runningTime总是大约1.8秒或更小但是在linux机器上它有时甚至超过2.5秒。 所以我想知道为什么这比CURLOPT_TIMEOUT_MS花费的时间更长?
编辑:我在一定程度上缩小了问题范围。我回应了curl_multi_exec()调用所花费的时间,发现每次在while循环的第二次迭代中,它比平常花费的时间更长。通常需要10 ^ -3到10 ^ -5秒,但在第二次迭代中需要0.5到1.5秒。答案 0 :(得分:0)
经过大量搜索,我发现我的Linux机器上没有启用 AsynchDNS ,因此它依次解析了网址中的域名,因此花费了大量时间。将我的libcurl库更新到7.21.7并启用AsynchDNS后,它按预期工作。