2017-01-12 2 views
3

Ниже приведено событие с ошибкой. Как определить конкретную ошибку?Как получить конкретную ошибку сокета ReactPHP?

<?php 
$loop = Factory::create(); 
$socket = new React\Socket\Server($loop); 
$socket->on('connection', function (\React\Socket\ConnectionInterface $stream){ 

    $stream->on('data', function($rsp) { 
     echo('on data'); 
    }); 

    $stream->on('close', function($conn) { 
     echo('on close'); 
    }); 

    $stream->on('error', function($conn) use ($stream) { 
     echo('on error'); 
     // How do I determine the specific error? 
     $stream->close(); 
    }); 

    echo("on connect"); 
}); 

$socket->listen('0.0.0.0',1337); 
$loop->run(); 

ответ

3

Глядя на реализации ConnectionInterface, React\Socket\Connection, она расширяет React\Stream\Stream, который использует emit() (который будет вызывать обратные вызовы, зарегистрированные с on): https://github.com/reactphp/stream/blob/c3647ea3d338ebc7332b1a29959f305e62cf2136/src/Stream.php#L61

$that = $this; 
$this->buffer->on('error', function ($error) use ($that) { 
    $that->emit('error', array($error, $that)); 
    $that->close(); 
}); 

Таким образом, первый аргумент эта функция является ошибкой, вторая - $stream:

$stream->on('error', function($error, $stream) { 
    echo "an exception happened: $error"; 
    // $error will be an instance of Throwable then 
    $stream->close(); 
}); 
Смежные вопросы