php curl_multi_exec () занимает больше времени, чем установлено в CURLOPT_TIMEOUT_MS

0

Я использую 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 $ runTime всегда около 1,8 с или меньше, но на машине Linux иногда бывает даже больше 2,5 секунд. Поэтому я хотел знать, почему это занимает больше времени, чем CURLOPT_TIMEOUT_MS?

EDIT: Я немного сузил проблему. Я повторил время, проведенное в вызове curl_multi_exec(), и обнаружил, что каждый раз во второй итерации цикла while он занимает больше времени, чем обычно. Обычно он принимает 10 ^ -3 до 10 ^ -5 секунд, но на второй итерации он занимает от 0,5 до 1,5 секунд.

  • 0
    Вызывает ли он fork() или аналогичный внутри? Если это так, тайм-аут начинается только после того, как новый процесс его проанализирует и применит. В этом случае время ожидания не будет включать время запуска нового процесса.
Теги:
libcurl
curl-multi

1 ответ

0

После многого поиска я обнаружил, что AsynchDNS не был включен на моей машине Linux, и, следовательно, он последовательно разрешал домены в URL-адресах и, следовательно, занимал много времени. После обновления библиотеки libcurl до 7.21.7 и включения AsynchDNS она работала должным образом.

  • 0
    как включить AsynchDNS?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню