johncurt / async-mysql
AsyncMySQL - 异步 MySQL 查询管理器
Requires
- php: >=7.0
- ext-mysqli: *
- ext-mysqlnd: *
Requires (Dev)
- phpunit/phpunit: ^7.1@dev
This package is not auto-updated.
Last update: 2024-09-28 07:49:34 UTC
README
AsyncMySQL 帮助管理多个异步查询,成功或失败时将回调。它可以单独使用来加速单个模型中的并发查询,也可以与 Amp 或 Ratchet 等异步库一起使用。
背景
此库使用 mysqli::poll 检查其查询池中完成的查询。一旦查询完成,它将调用适当的回调。此库要求您已安装 mysqli 和 mysqlnd。只有 mysqlnd 支持 mysqli_poll 函数。
安装
composer require johncurt/async-mysql
使用
首先实例化一个 ConnectionManager。这是一个将查询连接到数据库(每个查询一个连接)并轮询连接以查看它们是否准备就绪的类。将所有连接数据传递给它。
$conn = new \JohnCurt\AsyncMySQL\ConnectionManager('127.0.0.1', 'user', 'pass', 'schema', 3306);
然后为每个将附加的查询实例化一个 Query。确保传递回调(如果不需要回调则传递 null),并使用 use
语句来访问回调作用域外的变量。
$success1 = function(\mysqli_request $request) use (&$request1) { $request1 = $request;};
$failure1 = function(string $error) use (&$error1) { $error1 = $error;};
$query = new \JohnCurt\AsyncMySQL\Query('SELECT * FROM table WHERE 1', $success1, $failure1);
实例化查询后,您可以将其发送进行处理
$conn->runQuery($query);
您可以添加任意多个。当您准备好获取一些结果时,您可以让 ConnectionManager 只收获准备就绪的查询,或者您可以进行阻塞调用以等待所有查询返回。无论如何,所有查询都在单独的连接中异步运行。
$conn->reapAny();
或
$conn->reapAll();
(阻塞)
您还可以向 reapAll
方法传递超时时间,这将导致它在指定秒数后停止等待查询完成。
联系
如果您有任何问题,请随时联系!您可以在 [https://johnfansler.com] 找到我的个人网站,或者在我的 PHP 博客 [https://engagedPHP.com] 上找到我。我很乐意听到您的评论以及您可能发现的任何错误。
许可证
版权所有 2018 John C. Fansler
根据 Apache 许可证 2.0 版(“许可证”);除非遵守许可证规定或以书面形式达成协议,否则不得使用此文件。您可以在以下位置获取许可证副本:
https://apache.ac.cn/licenses/LICENSE-2.0
除非适用法律要求或书面同意,否则在许可证下分发的软件按“原样”基础分发,不提供任何明示或暗示的保证或条件。有关许可证的具体语言管辖权限和限制,请参阅许可证。