【问题标题】:Unable to do non blocking I/O in React PHP无法在 React PHP 中进行非阻塞 I/O
【发布时间】:2018-10-14 13:57:06
【问题描述】:

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

$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();

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

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

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

谢谢

【问题讨论】:

    标签: php nonblocking event-loop reactphp


    【解决方案1】:

    嘿,这里是 ReactPHP 核心团队成员。循环期望一切都是异步的,所以在你的 $database->write($data); 中放置一个睡眠。将阻塞循环。您的数据库连接必须利用事件循环才能实现非阻塞。我的建议是查看https://github.com/friends-of-reactphp/mysqlhttps://github.com/voryx/PgAsync 或查看https://github.com/reactphp/react/wiki/Users#databases 此处的列表,具体取决于您的数据库。 ReactPHP 不会神奇地让所有东西都变成非阻塞的,你必须使用包来为你解决这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-24
      • 2015-09-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-06
      • 2016-09-16
      • 2012-06-18
      相关资源
      最近更新 更多