thinkphp 5.1 可通过官方 think-swoole 扩展无缝接入 swoole,复用原有路由、控制器与中间件,仅需几行配置即可启动常驻内存的高性能 http 服务,显著提升并发能力。

想让 ThinkPHP 5.1 项目摆脱 PHP-FPM 的进程重启开销、突破传统 Web 服务器瓶颈,直接用 Swoole 启动常驻内存的高性能 HTTP 服务——这不是重写框架,而是复用原有路由、控制器和中间件,仅靠几行配置就能获得数倍并发能力提升。
确认环境与基础依赖
先确保 PHP 版本 ≥ 7.2(TP5.1 官方最低要求),且已安装 Swoole 扩展。执行 php -m | grep swoole,若无输出,需补装:用 pecl install swoole 或源码编译后,在 php.ini 中追加 extension=swoole.so。
接着检查 ThinkPHP 是否为 5.1.20 及以上版本——低于此版本的 think-swoole 扩展存在路径解析缺陷,【必须升级】,否则所有带参数的 URL 路由都会 404。
最后运行 composer require topthink/think-swoole:^2.0 安装官方扩展包,该命令会自动兼容 TP5.1 的容器与生命周期管理。
一键启动 Swoole HTTP 服务
无需新建任何 PHP 文件,直接在项目根目录执行:
php think swoole
服务默认监听 0.0.0.0:9501,终端将显示 Swoole http server started: <http:></http:>。此时浏览器访问该地址,即可看到和 Nginx+PHP-FPM 完全一致的首页响应。
这一步调用了扩展内置的 ThinkSwooleCommand,它自动完成 Worker 进程初始化、框架核心加载、请求变量映射($_GET/$_POST/$_SERVER)三件事,比手写 swoole_http_server 更安全——【不会因忘记清空全局变量导致请求污染】。
自定义服务配置
在 config/ 目录下新建 swoole.php 配置文件,内容如下:
<?php return [ 'host' => '0.0.0.0', 'port' => 9502, 'options' => [ 'worker_num' => 6, 'max_request' => 3000, 'daemonize' => false, 'enable_static_handler' => true, 'document_root' => __DIR__ . '/../public/static', ], ];
其中 document_root 必须指向 public/static(非 public 根目录),否则 CSS/JS 会 404;max_request 建议设为 3000 左右,过高可能引发内存缓慢泄漏,过低则频繁重启 Worker 影响性能。
改完配置后,再次执行 php think swoole,服务将自动读取新配置并生效。
处理静态资源与跨域
方法一:启用内置静态处理器
确保 swoole.php 中 'enable_static_handler' => true,且 document_root 指向正确物理路径。Swoole 底层会拦截 .js、.css、.png 等请求,直接读取文件返回,不经过 ThinkPHP 路由,速度极快。
方法二:交由 Nginx 处理(推荐生产环境)
停用 Swoole 的静态处理,把 Nginx 的 location ~* \.(js|css|png|jpg|gif|ico)$ 块指向 public/static 目录,并将动态请求反向代理至 127.0.0.1:9502。这样既保留 Swoole 的长连接优势,又利用 Nginx 的静态文件缓存与 gzip 压缩能力。
跨域问题无需额外代码:在 app/middleware.php 中添加 think\middleware\AllowCrossDomain::class 即可,Swoole 模式下该中间件完全生效。
调试与日志落盘
第一步:关闭守护进程
在 swoole.php 中设 'daemonize' => false,启动时日志实时打印到终端,便于观察 Worker 启动、请求进入、异常堆栈。
第二步:捕获未捕获异常
编辑 app/exception_handle.php,确保 render() 方法中包含 Log::record($e->getMessage(), 'error'),Swoole 模式下日志仍写入 runtime/log/,但需注意:单个 Worker 进程内日志句柄复用,【不能在 onWorkerStart 中提前 fclose 日志文件】。
第三步:查看请求耗时
在 app/middleware.php 开头加入性能中间件:[\think\middleware\Trace::class],访问时页面底部会显示完整执行链路与各环节耗时,包括 Swoole 请求解析、路由匹配、控制器执行等阶段。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











