2014-12-05 55 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後,按預期工作。