2016-11-29 15 views
1

react \ socketを使用しているTCPソケットサーバーがあります。ReactPHP /ソケットサーバー - 接続タイムアウトを設定する

クライアントから受信したデータに応じて、何かをしてからクライアントとの接続を閉じます。

問題は、接続タイムアウトを行う方法を理解できません。サーバが一定期間データを受信して​​いない場合、接続を閉じる方法はありますか。

私は()はstream_set_timeoutを使用して()私はstream_socket_acceptでやったのと同じを探しています

<?php 

require __DIR__ . '/vendor/autoload.php'; 

$loop = React\EventLoop\Factory::create(); 
$socket = new React\Socket\Server($loop); 

$socket->listen(2222); 

$socket->on('connection', function ($conn) { 

    $conn->on('data', function ($data) use ($conn) { 

     if (substr($data, 0, 3) == 'one') { 
      $conn->end('end_two'); 
     } 
     else if (substr($data, 0, 3) == 'two') { 
      $conn->end('end_two'); 
     } 
     else { 
      $conn->close(); 
     } 
    }); 

}); 
$loop->run(); 
stream_set_timeout($client, 5); 

答えて

3

あなたは以下の例のように、あなたの$loopにタイマーを追加する必要があります。

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

$socket = new React\Socket\Server($loop); 
$socket->on('connection', function ($conn) use ($loop) { 
    $func = function() use ($conn) {$conn->close();}; 
    $timer = $loop->addTimer(1, $func); 
    $conn->on('data', function ($data) use ($loop, &$timer, $func) { 
     $timer->cancel(); 
     $timer = $loop->addTimer(1, $func); 
    }); 
}); 

例から:

https://github.com/reactphp/socket/issues/42

関連する問題