Индивидуальное время отклика с использованием PHP curl_multi - PullRequest
3 голосов
/ 26 января 2012

Можно записать время отклика каждого процесса, используя curl_multi?Вот код, который я сейчас использую. Я просто не уверен, как записать время отклика каждого процесса.Спасибо за любую помощь!

do 
{
    $execReturnValue = curl_multi_exec($mh, $runningHandles);
} while ($execReturnValue == CURLM_CALL_MULTI_PERFORM);

// Loop and continue processing the request
while ($runningHandles && $execReturnValue == CURLM_OK) 
{
    // Wait forever for network
    $numberReady = curl_multi_select($mh);
    if ($numberReady != -1) 
    {
        // Pull in any new data, or at least handle timeouts
        do     
        {
            $execReturnValue = curl_multi_exec($mh, $runningHandles);
        } while ($execReturnValue == CURLM_CALL_MULTI_PERFORM);
    }
}       
//End Run
//Get Data and Close
foreach($ping as $cid=>$p)
{
    $curlError = curl_error($c[$cid]);
    if($curlError == "") 
    {
        $curl_data[$cid] = curl_multi_getcontent($c[$cid]);
    } 
    else 
    {
        //email me!
    }           
curl_multi_remove_handle($mh,$c[$cid]);
curl_close($c[$cid]);
}
curl_multi_close($mh);

1 Ответ

1 голос
/ 26 января 2012

Используйте microtime (), чтобы получить время в начале forloop, а затем используйте microtime () в конце, чтобы получить время в конце вашего кода и вычесть время в конце из времени в начале, чтобы получить разницу. Вот как долго твой код работал.

РЕДАКТИРОВАТЬ:

curl_setopt($ch, CURLOPT_WRITEFUNCTION, ‘read_body’);//sets callback

http://www.php.net/manual/en/function.curl-setopt.php

curl_multi запускает процессы параллельно. Поэтому мое предыдущее предложение не сработает. Решение: добавить обратный звонок! возьмите микротрем, когда все эти процессы запускаются, и в записи обратного вызова укажите идентификатор процесса и время, когда он зарегистрировался. К сожалению, все эти процессы будут бороться за контроль над этим обратным вызовом. Я полагаю, что решение этой проблемы заключается в использовании fork () для создания новых процессов. Это требует много работы только для того, чтобы вернуть индикатор выполнения, но если вам интересно, здесь есть ссылка на php fork (): http://php.net/manual/en/function.pcntl-fork.php

...