簡體   English   中英

php curl_multi_exec()花費的時間超過了CURLOPT_TIMEOUT_MS中設置的時間

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM