使用PHP curl_multi的单独响应时间

时间:2012-01-26 18:36:14

标签: php asynchronous curl-multi

可以使用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 个答案:

答案 0 :(得分:1)

使用microtime()在你的forloop开始时获取时间,然后在末尾使用microtime()来获取代码结尾的时间,并从开头的时间减去结束的时间。得到不同。这是您的代码运行的时间。

编辑:

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

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

curl_multi并行启动进程。因此我以前的建议是行不通的。解决方案:添加回调!当所有这些进程开始时,并在回调记录中获取进程ID和它检入的时间的微时间。不幸的是,所有这些进程都将争夺对该回调的控制权。我认为解决方案是使用fork()来创建新进程。这只是为了获得进度条而进入相当多的工作,但如果你感兴趣,这里是php fork()的链接: http://php.net/manual/en/function.pcntl-fork.php