2017-04-24 65 views
2

如何检测到React PHP客户端无法连接服务器?我希望我在底部显示的虚构的else()方法。我只需要等待一段合理的时间,如果没有发生事件,它就不会连接。检测React PHP客户端是否无法连接到服务器

<?php 

require 'vendor/autoload.php'; 

$loop = React\EventLoop\Factory::create(); 

$dnsResolverFactory = new React\Dns\Resolver\Factory(); 
$dns = $dnsResolverFactory->createCached('8.8.8.8', $loop); 
$connector = new React\SocketClient\Connector($loop, $dns); 

$connector->create('127.0.0.1', 1337)->then(function (React\Stream\Stream $stream) { 
    $buffer = ''; 
    $stream->on('data', function ($data, $stream) use (&$buffer) { 
    }); 
}) 
/* 
->else(function() { 
    //no connection? 
}); 
*/ 

$loop->run(); 

回答

1

看一看ReactPHP的PromiseInterface。要么使用第二个回叫then或使用otherwise,这正是您的人造else

$connector->create('127.0.0.1', 1337)->then(function (React\Stream\Stream $stream) { 
    $buffer = ''; 
    $stream->on('data', function ($data, $stream) use (&$buffer) { 
     // ... 
    }); 
}, function (Throwable $error) { 
    // handle error here 
}); 
+0

完美!另外,感谢您将我指向'PromiseInterface'。 – user1032531

0
<?php 

require 'vendor/autoload.php'; 

$loop = React\EventLoop\Factory::create(); 

$dnsResolverFactory = new React\Dns\Resolver\Factory(); 
$dns = $dnsResolverFactory->createCached('8.8.8.8', $loop); 
$connector = new React\SocketClient\Connector($loop, $dns); 

$gotConnected=false; 

$connector->create('127.0.0.1', 1337)->then(function (React\Stream\Stream $stream) use(&$gotConnected) { 
    $gotConnected=true; 
    $buffer = ''; 
    $stream->on('data', function ($data, $stream) use (&$buffer) { 
    }); 
}); 

$loop->run(); 

echo($gotConnected?'Got connected':'Did not get connected'); 
+0

虽然这适用于单个套接字,但还有更好的方法来处理错误[请参阅我的回答](http://stackoverflow.com/a/43968729/2373138)。 – kelunik

相关问题