必须配置MySQL连接池以解决Swoole高并发下的性能瓶颈,三种方案:启用think-swoole内置池(改config/swoole.php中db.enable为true)、手写协程池(自定义健康检测与主从分离)、使用Swoole官方MySQLPool组件(composer安装后初始化并安全get/put)。

当Swoole服务在高并发下出现MySQL连接频繁创建销毁、响应延迟上升、数据库负载激增时,必须通过配置连接池来复用连接资源,避免短连接模式引发的性能瓶颈。
启用think-swoole内置连接池(最简路径)
适用于已接入think-swoole扩展且运行于Swoole常驻进程环境的ThinkPHP5项目,无需修改业务代码即可生效。
打开config/swoole.php文件,在'pool'配置段中将db.enable设为true:
【'db'=>['enable'=>true,'max_active'=>50,'max_wait_time'=>5]】
保存后重启swoole服务:php think swoole restart。
此时Db门面自动切换为连接池实例,所有Db::table()->select()调用均从池中获取连接,执行完毕自动归还。
手写协程MySQL连接池(精准可控)
适合需要自定义健康检测、主从分离或空闲驱逐策略的中大型项目。
第一步:在app/Pool/MySqlPool.php中定义池类,继承Swoole\Coroutine\Channel并重写构造逻辑:
第二步:在onWorkerStart事件中初始化池子,预热10个连接:
go(function () { $pool = new MySqlPool(10); for ($i = 0; $i connect(['host'=>'127.0.0.1','user'=>'root','password'=>'123456','database'=>'test']); $pool->push($mysql); } });
Swoole 6.1.1 是一个专为 PHP 设计的高性能事件驱动并发网络引擎。作为稳定版,它修复了编译时对 zlib 依赖的缺失及 curl 模块的内存安全风险。该版本支持协程、多线程与多进程架构,内置 TCP/HTTP/WebSocket 服务器,能够显著提升 PHP 在微服务、实时通信等场景下的执行效率与并发能力。
第三步:业务协程中调用$pool->pop(500)获取连接,500为毫秒级超时,防止无限等待;查询结束后必须$pool->push($mysql),【严禁调用$mysql->close()】,否则连接永久丢失。
第四步:在pop前增加ping检测,若$mysql->ping()返回false则丢弃该连接并新建一个补入池中。
使用Swoole官方MySQLPool组件(开箱即用)
方法一:安装依赖
composer require swoole/database
方法二:在服务启动处初始化
use Swoole\Database\MySQLPool; use Swoole\Database\MysqliConfig; $config = new MysqliConfig(); $config->setHost('127.0.0.1')->setPort(3306)->setUser('root')->setPassword('123456')->setDatabase('test'); $pool = new MySQLPool($config, 30);
方法三:协程内安全调用
$conn = $pool->get(); try { $result = $conn->query('SELECT * FROM user'); } finally { $pool->put($conn); }
【务必在finally块中put,否则触发泄漏告警】

















