ReactPHP/Socket 服务器 - 设置连接超时
ReactPHP/Socket server - set connection timeout
我有使用 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);
您需要为您的 $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);
});
});
示例来自:
我有使用 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);
您需要为您的 $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);
});
});
示例来自: