4

使用 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);
4

1 回答 1

2

使用 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

于 2012-01-26T19:00:59.287 回答