0

我正在使用HttpRequestandHttpRequestPool发送并行 http 请求,请求数最多为 200 或其他东西,问题是某些接收器可能处于脱机状态,因此HttpRequestPool::send()将等到它得到响应或直到它超时。

使用示例:

    $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();

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

**ERRORS**:
[13-Nov-2012 14:20:00 UTC] PHP Fatal error:  Uncaught exception HttpRequestPoolException' with message 'Exception caused by 2 inner exception(s)' in C:\inetpub\wwwroot\DeusTesting\TimeSet.php:130
 inner exception 'HttpInvalidParamException' with message 'Empty or too short HTTP message: ''' in C:\inetpub\wwwroot\DeusTesting\TimeSet.php:0
 inner exception 'HttpRequestException' with message 'Timeout was reached; Connection time-out (http://sim6261.agni.lindenlab.com:12046/cap/11b23456-63bd-1c56-8692-b640ac992a76/)' in C:\inetpub\wwwroot\DeusTesting\TimeSet.php:130
Stack trace:
#0 C:\inetpub\wwwroot\DeusTesting\TimeSet.php(0): HttpRequestPool->send()
#1 {main}
thrown in C:\inetpub\wwwroot\DeusTesting\TimeSet.php on line 130
[13-Nov-2012 14:30:03 UTC] PHP Fatal error:  Uncaught exception 'HttpRequestPoolException' with message 'Exception caused by 12 inner exception(s)' in  C:\inetpub\wwwroot\DeusTesting\TimeSet.php:130
4

1 回答 1

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 秒的超时时间。这可以防止我的脚本继续运行并等待响应。

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

于 2012-12-18T10:18:22.030 回答