HttpRequest和HttpRequestPool错误以及如何处理它们

时间:2012-11-14 03:25:26

标签: php httprequest

我正在使用HttpRequestHttpRequestPool发送并行的http请求,请求数量最多为200或者其他东西,有些接收器可能处于脱机状态,因此{ {1}}会一直等到响应或超时。

使用示例:

HttpRequestPool::send()

在我的php错误日志中我收到错误,有人可以告诉我我要做些什么来避免它们吗?我猜测这种情况的发生主要是因为对无效目的地的超时请求,因为所有有效的接收器都会得到消息并采取相应的行动。 有什么建议? Ty提前。

    $query = "CALL GetBoardsURLS()";
    $result = mysql_query($query) or die("ERROR:QUERY_FAILED 8" . mysql_error());       

    $pool = new HttpRequestPool();

    //Add the data to the request pool.     
    while($row = mysql_fetch_row($result))
    {  
        $req = new HttpRequest($row[0].'/', HTTP_METH_POST);
        $req->setBody($message);
        $pool->attach($req);
    }

    $pool->send();

1 个答案:

答案 0 :(得分:0)

好的,这个问题已经存在了一段时间而没有回答。所以我会说我做了什么来摆脱错误。

$pool = new HttpRequestPool(); 

//Add the data to the request pool.
foreach($boardsURLS as $boardURL)
{   
    $req = new HttpRequest($boardURL.'/', HTTP_METH_POST); 
    $req->setBody($message);
    $req->setOptions(array('connecttimeout' => 3, 'timeout' => 3));
    $pool->attach($req);    
} 

$ErrorLog = fopen('Logs/GameEnd.txt', "a+");

try
{
    $pool->send();
}
catch(HttpException $ex)
{
    fprintf($ErrorLog, '%s', $ex);  
}

fclose($ErrorLog);

“错误”是例外,因为我没有处理它们,所以它们被添加到php53_errors.log中。现在通过添加try和catch,可以处理异常以便解决它。现在我将异常(超时异常)存储在一个单独的文件中(这是因为我想)其他人当然可以以不同的方式处理它们。所以我无能为力。

下一步

$req->setOptions(array('connecttimeout' => 3, 'timeout' => 3));

这是我喜欢的部分。由于我并不真正关心响应,我只是希望我的http请求能够传输到接收器。我把超时时间设为3秒。这可以防止我的脚本继续运行并等待响应。

希望这会对某人有所帮助。干杯