swoole 4 http server 四步即可运行:实例化服务、监听请求、设置响应、启动运行;代码仅5行,无需nginx或php-fpm,执行php http_server.php后访问https://www.php.cn/link/85237feeff817d9ae295ca736165879d即可见带时间戳的欢迎页。

直接用 Swoole 4 创建一个可跑起来的 HTTP Server,其实就四步:实例化服务、监听请求、设置响应、启动运行。不需要改 Nginx、不依赖 PHP-FPM,命令行一执行就能访问,适合快速验证逻辑或做轻量后端服务。
基础服务代码(5行搞定)
新建 http_server.php,写入以下内容:
$http = new swoole_http_server('0.0.0.0', 9501);<br>$http->on('request', function ($request, $response) {<br> $response->header('Content-Type', 'text/plain; charset=utf-8');<br> $response->end("Hello from Swoole! Time: " . date('H:i:s'));<br>});<br>$http->start();
-
监听地址用
0.0.0.0表示接受所有网卡请求,本地测试可用127.0.0.1 - 端口 9501 是常用非特权端口,若被占用会报错,换一个即可(如 8080、8811)
-
$response->end()是必须调用的终止方法,且只能调用一次
启动与验证方式
终端执行:php http_server.php
Swoole 6.1.1 是一个专为 PHP 设计的高性能事件驱动并发网络引擎。作为稳定版,它修复了编译时对 zlib 依赖的缺失及 curl 模块的内存安全风险。该版本支持协程、多线程与多进程架构,内置 TCP/HTTP/WebSocket 服务器,能够显著提升 PHP 在微服务、实时通信等场景下的执行效率与并发能力。
服务启动后,终端会保持运行状态(无退出提示即成功)。打开浏览器访问:
https://www.php.cn/link/85237feeff817d9ae295ca736165879d,看到带时间戳的欢迎语即表示通了。
- Chrome 访问时会额外请求
/favicon.ico,可在 request 回调开头加判断避免干扰:if ($request->server['request_uri'] === '/favicon.ico') { return $response->end(); } - 用
curl测试更干净:curl https://www.php.cn/link/85237feeff817d9ae295ca736165879d?name=alice,再在回调里打印$request->get就能看到参数
常见问题速查
如果打不开页面,按顺序排查:
- 确认 PHP 已安装 Swoole 扩展:
php -m | grep swoole,没输出需先pecl install swoole - 检查端口是否被占用:
lsof -i :9501或netstat -tuln | grep 9501 - Linux 系统防火墙可能拦截,临时放行:
sudo ufw allow 9501(Ubuntu)或sudo firewall-cmd --add-port=9501/tcp(CentOS) - Windows WSL 用户注意:浏览器访问的是宿主机 IP,不是 localhost,可尝试
http://$(hostname -I | awk '{print $1}'):9501
加点实用功能(可选扩展)
想让服务更贴近真实场景,可以快速加上:
-
路由分发:用
$request->server['request_uri']解析路径,比如/api/user转给对应处理函数 -
静态资源支持:Swoole 不内置静态文件服务,但可简单判断后读取并
$response->end(file_get_contents($file)) -
POST 数据接收:
var_dump($request->post)直接拿到表单数据;JSON 请求需手动json_decode($request->rawContent(), true) -
设置响应头和 Cookie:
$response->header('X-Powered-By', 'Swoole'),$response->cookie('token', 'abc123', time()+3600)









