无法在 React PHP 中进行非阻塞 I/O

Rah*_*eel 3 php nonblocking event-loop reactphp

我试图在数据库中插入一条记录到反应套接字服务器。我不知道如何以非阻塞方式进行操作

$loop = Factory::create();

$server = new Server('127.0.0.1:4040', $loop);
$database = new Database();

$server->on('connection', function(ConnectionInterface $conn)  use ($database) {
    $conn->write('Welcome, you can start writing your notes now...');

    $conn->on('data', function($data) use ($conn, $database) {
        $database->write($data);
        $conn->write('I am supposed to execute before database write');
    });
});

$loop->run();
Run Code Online (Sandbox Code Playgroud)

write数据库中的方法在sleep(10)执行sql语句之前有几秒钟的时间。所以我期待I am supposed to..应该立即打印下一条消息。

我的期望是,当有 I/O 操作时,该操作将被移动到事件表并且不会阻塞调用堆栈。根据事件循环和非阻塞的定义。

如何以非阻塞方式执行相同的操作。

谢谢

小智 7

嘿 ReactPHP 核心团队成员。循环期望一切都是异步的,因此在 $database->write($data); 中休眠。会阻塞循环。您的数据库连接必须利用事件循环才能使其非阻塞。我的建议是查看https://github.com/friends-of-reactphp/mysqlhttps://github.com/voryx/PgAsync或检查这里的列表https://github.com/reactphp/react /wiki/Users#databases取决于您的数据库。ReactPHP 不会神奇地使一切都成为非阻塞的,您必须使用为您处理这些的包。