我使用reactphp为api服务器创建客户端。但我有一个问题,当我的连接关闭时,无论什么原因,我都无法自动重新连接。
它不起作用:
$this->loop = \React\EventLoop\Factory::create();
$host = config('app.reactphp_receiver_host');
$port = config('app.reactphp_receiver_port');
$this->connector = new \React\Socket\Connector($this->loop);
$this->connector
->connect(sprintf('%s:%s', $host, $port))
->then(
function (\React\Socket\ConnectionInterface $conn)
{
$conn->on('data', function($data)
{
});
$conn->on('close', function()
{
echo "close\n";
$this->loop->addTimer(4.0, function () {
$this->connector
->connect('127.0.0.1:8061')
->then( function (\Exception $e)
{
echo $e;
});
});
});
});
$this->loop->run();
异常是空的。
答案 0 :(得分:0)
嘿ReactPHP团队成员在这里。 Promise的then方法接受两个callables。第一个用于操作成功,第二个用于何时发生错误。看起来你在你的例子中混合了两者。我的建议是使用这样的东西来捕捉错误和成功,但也可以无限重新连接:
$this->loop = \React\EventLoop\Factory::create();
$this->connector = new \React\Socket\Connector($this->loop);
function connect()
{
$host = config('app.reactphp_receiver_host');
$port = config('app.reactphp_receiver_port');
$this->connector
->connect(sprintf('%s:%s', $host, $port))
->then(
function (\React\Socket\ConnectionInterface $conn) {
$conn->on('data', function($data) {
});
$conn->on('close', function() {
echo "close\n";
$this->loop->addTimer(4.0, function () {
$this->connect();
});
}, function ($error) {
echo (string)$error; // Replace with your way of handling errrors
}
);
}
$this->loop->run();