1

react\socket を使用して TCP ソケット サーバーを使用しています。

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

問題は、サーバーが一定期間データを受信して​​いない場合、接続をタイムアウトにする方法を理解できないことです。接続を閉じる方法は?

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);
4

1 に答える 1

4

以下の例のように、タイマーを追加する必要があり$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

于 2016-11-29T14:47:24.113 に答える