Swoole搭建WebSocket服务需要哪些步骤

作者:袖梨 2026-07-21
要在PHP环境中用Swoole创建可运行的WebSocket服务,必须完成扩展安装、服务端脚本编写、端口放行与进程启动四个环节:先用pecl install swoole安装并启用扩展,再编写含open/message/close事件回调的ws_server.php脚本,接着放行9501端口并用php ws_server.php启动,最后通过ws://协议前端连接验证。

要在PHP环境中用Swoole创建一个可运行的WebSocket服务,必须完成扩展安装、服务端脚本编写、端口放行与进程启动四个不可跳过的环节,缺一不可。

确认并安装Swoole扩展

先检查PHP是否已启用swoole扩展:执行 php -m | grep swoole,若无输出则需安装。

推荐使用pecl一键安装:pecl install swoole,安装完成后在php.ini中添加 extension=swoole 并重启PHP服务。

【必须重启PHP服务,否则新扩展不会生效】

验证是否成功:新建 test.php,写入 <?php var_dump(extension_loaded('swoole'));,浏览器或CLI执行返回 bool(true) 即表示就绪。

编写WebSocket服务器脚本

新建文件 ws_server.php,内容如下:

第一步:实例化 SwooleWebSocketServer,绑定监听地址和端口(如 "0.0.0.0", 9501);

第二步:注册 open 事件回调——客户端完成HTTP握手后触发,此时可获取 $request->fd$request->get、Cookie等信息;

第三步:注册 message 事件回调——收到客户端消息时执行,用 $server->push($frame->fd, $data) 单发,或遍历 $server->connections 广播;

第四步:注册 close 事件回调——连接断开时清理资源,避免fd残留;

最后调用 $server->start() 启动服务。

开放端口并启动服务

方法一:命令行直接启动
进入脚本所在目录,执行 php ws_server.php。服务将在后台持续运行,终端会显示启动日志。

方法二:守护进程部署(生产环境必需)
使用supervisor管理进程,配置 autostart=trueautorestart=true,防止意外退出。

【防火墙必须放行9501(或你设定的端口),否则外部无法建立WebSocket连接】

宝塔面板用户:在「安全」页面手动放行该端口;CentOS系统执行 firewall-cmd --permanent --add-port=9501/tcp && firewall-cmd --reload

前端连接测试

打开Chrome开发者工具控制台,粘贴以下代码:

const ws = new WebSocket("ws://你的服务器IP:9501");

ws.onopen = () => console.log("已连接");

ws.onmessage = e => console.log("收到:", e.data);

ws.send("hello");

若控制台打印“已连接”,且服务端PHP进程输出“客户端 xxx 已连接”,说明握手成功。

注意:不能用 http:// 地址测试,必须用 ws:// 协议;本地测试可用 ws://127.0.0.1:9501

相关文章

精彩推荐