diego-ninja / swoole-mysql-doctrine-driver
Swoole Coroutine Mysql 扩展之上的 Doctrine DBAL Driver 实现
dev-main
2022-02-14 08:57 UTC
Requires
- php: ^8.0
- ext-pdo: *
- doctrine/dbal: ^3.0
Requires (Dev)
- pestphp/pest: ^1.0
- swoole/ide-helper: ^4.6
Suggests
- ext-openswoole: You need either ext-swoole or ext-openswoole
- ext-swoole: You need either ext-swoole or ext-openswoole
This package is auto-updated.
Last update: 2024-09-14 14:46:43 UTC
README
基于 Swoole\Coroutine\MySQL
的 Doctrine\DBAL\Driver
实现。
入门指南
安装
composer require diego-ninja/swoole-mysql-doctrine-driver
使用
Doctrine 参数,对于 DBAL 和 ORM 项目都接受 driverClass
选项;这就是我们可以注入此项目驱动的地方
use Doctrine\DBAL\{Driver, DriverManager}; $params = [ 'dbname' => 'mysql', 'user' => 'mysql', 'password' => 'mysql', 'host' => 'db', 'driverClass' => Driver\Swoole\Coroutine\Mysql\Driver::class, 'poolSize' => 8, ]; $conn = DriverManager::getConnection($params);
是的,我故意使用了 Doctrine\DBAL\Driver
命名空间 + Swoole\Coroutine\MySQL
命名空间,所以它不会混淆。
你可以在协程(纤程)内部尽情使用它
Co\run(static function() use ($conn): void { $results = []; $wg = new Co\WaitGroup(); $start_time = time(); Co::create(static function() use (&$results, $wg, $conn): void { $wg->add(); $results[] = $conn->executeQuery('select 1, sleep(1)')->fetchOne(); $wg->done(); }); Co::create(static function() use (&$results, $wg, $conn): void { $wg->add(); $results[] = $conn->executeQuery('select 1, sleep(1)')->fetchOne(); $wg->done(); }); $wg->wait(); $elapsed = time() - $start_time; $sum = array_sum($results); echo "Two sleep(1) queries in $elapsed second, returning: $sum\n"; });
你应该会看到 一秒内的两个 sleep(1) 查询,返回:2
,而总时间应该是 不 是 2(sleep(1) 的总和),因为它们是并发运行的。
real 0m1.228s user 0m0.036s sys 0m0.027s