johncurt/async-mysql

AsyncMySQL - 异步 MySQL 查询管理器

0.1.3 2018-03-11 23:28 UTC

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

除非适用法律要求或书面同意,否则在许可证下分发的软件按“原样”基础分发,不提供任何明示或暗示的保证或条件。有关许可证的具体语言管辖权限和限制,请参阅许可证。