如何在reactphp上自动重新连接客户端?

时间:2018-04-07 09:11:21

标签: php sockets client reactphp

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

异常是空的。

1 个答案:

答案 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();