[英]Why would curl ignore CURLOPT_TIMEOUT_MS (but honor CURLOPT_TIMEOUT)?
[英]php curl_multi_exec() taking longer than time set in CURLOPT_TIMEOUT_MS
我正在使用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秒。
經過大量搜索之后,我發現Linux計算機上未啟用AsynchDNS ,因此它順序解析了url中的域,因此花費了大量時間。 將我的libcurl庫更新為7.21.7並啟用AsynchDNS后,它按預期工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.