2014-12-05 43 views
0
设定较长

我使用curl_multi_exec()来获取一些API的数据,并使用下面的代码:PHP curl_multi_exec()采取比时间CURLOPT_TIMEOUT_MS

 $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

它在内部调用'fork()'或类似吗?如果是这样,超时才会在新进程解析并应用它时开始。在这种情况下,超时将不包括新的进程启动时间。 – Paul 2014-12-05 14:30:21

回答

0

搜索了很多之后,我发现AsynchDNS在我的Linux机器上没有启用,因此它依次解析了url中的域名,因此花费了大量的时间。将我的libcurl库更新到7.21.7并启用AsynchDNS后,按预期工作。