2017-04-24 20 views
2

React PHPクライアントがサーバに接続できないことをどのように検出できますか?私は架空のelse()メソッドを望んでいました。妥当な時間だけ待つだけでいいのですが、on dataイベントが発生していなければ、接続されていません。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の2番目のコールバックを使用するか、またはという正確にはotherwiseを使用してください。

$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

関連する問題