Swoole 是 Hyperf 协程 MySQL 的事实标准依赖,官方推荐启用 Swoole 运行时协程化(Swoole\Runtime::enableCoroutine)以实现 PDO/MySQLi 自动协程化;Swow 仅实验性支持,无开箱即用协程 MySQL 方案。

Hyperf 的协程 MySQL 客户端主要依赖 Swoole 引擎,但也支持 Swow 引擎,不过支持程度和成熟度有明显差异。
Hyperf 对 MySQL 协程访问的底层实现方式
Hyperf 本身不直接实现 MySQL 协程协议,而是复用底层协程引擎提供的异步 I/O 能力。目前官方明确支持两种运行时:
-
Swoole(主流、完整支持)
- Hyperf 默认且最成熟的协程 MySQL 方案基于
Swoole\Coroutine\MySQL(已废弃)或更推荐的Swoole\Runtime::enableCoroutine()+ 原生 PDO/MySQLi(即“一键协程化”模式)。 - 自 v2.2 起,Hyperf 官方不再维护独立的
hyperf/mysql协程客户端,转而推荐启用 Swoole 运行时协程化:Swoole\Runtime::enableCoroutine(true, SWOOLE_HOOK_ALL);
此后所有 PDO 或 MySQLi 操作自动变为协程安全,无需修改业务代码。
- 要求 Swoole ≥ 4.8.0(推荐 ≥ 4.8.14 或 5.0.x),且编译时开启
--enable-coroutine和--enable-mysqlnd(如使用 mysqlnd)。
- Hyperf 默认且最成熟的协程 MySQL 方案基于
-
Swow(实验性、有限支持)
MySQL8 CRM Schema Design Expert下载面向 CRM 系统的 MySQL 8 数据库模式设计。当用户需要为客户关系管理(CRM)系统设计、评审、优化或生成数据库模式时,应使用此项技能。
- Swow 是一个轻量级协程引擎,Hyperf 从 v3.0 开始通过
hyperf/engine组件提供基础适配。 - 但截至 2026 年底,Swow 尚未原生提供
Swow\Coroutine\MySQL类,也不支持mysqlnd协程化钩子(SWOOLE_HOOK_MYSQLND为 Swoole 特有)。 - 当前 Swow 下的 MySQL 访问需依赖:
- 使用
PDO+Swow\Coroutine\Socket手动封装(非 Hyerf 内置) - 或退回到同步阻塞模式(失去协程优势)
- 使用
- 因此,生产环境不建议用 Swow 驱动协程 MySQL,文档与社区案例也极少。
- Swow 是一个轻量级协程引擎,Hyperf 从 v3.0 开始通过
关键结论
- ✅ Swoole 是 Hyperf 协程 MySQL 的事实标准依赖,所有官方组件(如
hyperf/database)、连接池、故障恢复、超时控制都围绕 Swoole 设计。 - ⚠️ Swow 可运行 Hyperf 基础服务(HTTP、路由、DI),但MySQL 协程能力未对齐,无开箱即用方案。
- ❌ 不要混用:不能在 Swoole 环境下加载 Swow 扩展,反之亦然;二者互斥。
实操建议
-
检查是否启用协程 MySQL:
php --ri swoole | grep -E "(coroutine|mysql)" # 应看到 coroutine => enabled,且若启用了 mysqlnd,可能显示 mysqlnd support => enabled
-
推荐配置(Swoole 环境):
- 启用运行时协程(
config/autoload/processes.php或启动脚本中):Swoole\Runtime::enableCoroutine(true, SWOOLE_HOOK_ALL);
- 数据库配置保持标准 PDO 格式(如
mysql:host=...;dbname=...),无需特殊驱动。
- 启用运行时协程(
-
若坚持用 Swow,请接受当前限制:
- 使用同步 PDO(牺牲性能)
- 或等待 Swow 社区完善 MySQL 协程驱动(暂无明确时间表)
不复杂但容易忽略。

















