thinkphp/laravel用框架命令启动最省事:thinkphp执行php think swoole,laravel执行php artisan swoole:http start;手写需new swoole\http\server并on('request');启动后需排查日志、进程、端口及安全组。

直接用框架命令启动(ThinkPHP/Laravel 最省事)
如果你用的是 ThinkPHP 5.1+,装了 think-swoole 扩展,根本不用写任何 server 脚本:直接在项目根目录执行 php think swoole。它会自动加载框架、映射 $_GET/$_POST/$_SERVER,默认监听 0.0.0.0:9501。
Laravel 用户装了 laravel-swoole 后,用 php artisan swoole:http start 即可,比手写更稳妥——框架层已处理好请求隔离,不会因全局变量残留导致请求污染。
常见错误:Command "swoole" is not defined,说明扩展没装或没启用;检查 php --ri swoole 是否输出版本信息,再确认 config/app.php 或 config/providers.php 里是否注册了服务提供者。
手写 swoole_http_server 启动(适合调试或自定义逻辑)
最简可用代码就是这四行:
Swoole 6.1.1 是一个专为 PHP 设计的高性能事件驱动并发网络引擎。作为稳定版,它修复了编译时对 zlib 依赖的缺失及 curl 模块的内存安全风险。该版本支持协程、多线程与多进程架构,内置 TCP/HTTP/WebSocket 服务器,能够显著提升 PHP 在微服务、实时通信等场景下的执行效率与并发能力。
$http = new Swoole\Http\Server('127.0.0.1', 8080);
$http->on('request', function ($request, $response) {
$response->end('OK');
});
$http->start();
关键点:
- IP 地址填
127.0.0.1表示只允许本机访问;填0.0.0.0才能被局域网其他设备访问 - 端口不能被占用,启动前用
netstat -an | grep 8080(Linux/macOS)或netstat -ano | findstr :8080(Windows)确认 -
$response->end()只能调用一次;需要流式响应请改用$response->write()+$response->end() - 脚本必须在 CLI 模式下运行,Web 服务器(如 Nginx)里执行会报错
启动后访问不了?先查这三件事
浏览器打不开 http://127.0.0.1:8080,别急着重写代码,按顺序排查:
- 终端是否显示
Swoole http server started或类似成功日志?没看到说明进程根本没起来 - 执行
ps aux | grep http_server(Linux/macOS)或任务管理器,确认 PHP 进程还在运行 - Windows 用户注意:hosts 文件里加了虚拟域名(比如
127.0.0.1 demo.local),但浏览器访问时必须带端口号,例如http://demo.local:8080,否则默认走 80 端口,肯定连不上 - 云服务器(阿里云/腾讯云)务必检查安全组规则,手动放行你用的端口(如 9501)
守护进程和配置生效的坑
想后台运行?加 -d 参数:php think swoole -d。但要注意:
-
'daemonize' => true写在config/swoole.php里也行,但修改后必须stop再start,reload不会重新读取该配置 - 如果用了
app_host配置(比如强制指定域名),必须在框架配置中设好;因为onWorkerStart阶段$_SERVER['HTTP_HOST']还不存在,靠运行时解析会出错 - 修改 PHP 代码后,Swoole 不会自动热更新——每次改完都要
php think swoole restart,这是最容易忽略的一点









