宝塔面板安装swoole扩展后,需通过sigusr1信号触发worker平滑重启实现无中断上线:先验证扩展启用及版本,查master进程pid,执行kill -sigusr1 pid完成热重载;若失败则启用蓝绿部署,切流至新端口9502并逐步灰度。

宝塔面板安装Swoole扩展后,需在不中断线上服务的前提下完成新版本业务代码上线,避免用户请求失败或连接断开。
确认当前Swoole服务运行状态
执行/www/server/php/80/bin/php --ri swoole,确认输出中包含enabled且版本号与预期一致;若提示Extension 'swoole' not present,说明CLI环境未加载扩展,先检查/www/server/php/80/bin/php.ini是否已添加extension=swoole.so并重启PHP服务。
用ps -ef | grep swoole查出Master进程PID,记录下来——后续热重载必须用这个PID,错一个数字都会发错信号。
通过SIGUSR1信号触发Worker平滑重启
向Master进程发送热重载信号:kill -SIGUSR1 <strong>【你的Master进程PID】</strong>。
这一步不会立刻终止任何连接。Master收到信号后,会逐个通知Worker处理完手头请求再退出,同时拉起新Worker加载最新代码。整个过程无连接中断,但长连接(如WebSocket)会在旧Worker退出时自然断开,客户端需实现重连逻辑。
等待3~5秒后,执行ps -ef | grep swoole,观察Worker进程PID是否全部刷新——若仍有旧PID残留,说明部分Worker卡在长任务中,需检查onWorkerStop里是否有阻塞操作。
验证灰度升级效果
方法一:用curl测试HTTP服务是否已加载新逻辑
执行curl http://localhost:9501/test(假设监听9501端口),对比返回内容与新代码预期是否一致。
Swoole 6.1.1 是一个专为 PHP 设计的高性能事件驱动并发网络引擎。作为稳定版,它修复了编译时对 zlib 依赖的缺失及 curl 模块的内存安全风险。该版本支持协程、多线程与多进程架构,内置 TCP/HTTP/WebSocket 服务器,能够显著提升 PHP 在微服务、实时通信等场景下的执行效率与并发能力。
方法二:抓取实时日志确认Worker启动时间
执行tail -f /www/wwwroot/your-project/storage/logs/swoole.log,看到类似[2026-08-06 13:02:17] INFO Worker#1 started的新时间戳,说明新Worker已就位。
方法三:检查内存中加载的类版本
在新Worker内执行var_dump(new YourServiceClass()::VERSION);,确保输出的是新版本号而非缓存旧值——【Swoole默认不自动清除opcache,需在代码中显式调用opcache_invalidate()或设置opcache.revalidate_freq=1】。
蓝绿部署兜底方案(当SIGUSR1失效时)
第一步:在宝塔「网站」中新增一个同域名的备用站点,根目录指向新代码分支,PHP版本与主站完全一致。
第二步:修改该备用站点的Swoole启动脚本,将监听端口改为9502,并在server->start()前加ini_set('opcache.enable', '1');。
第三步:用宝塔「防火墙」临时放行9502端口,通过curl http://localhost:9502/health确认服务可通。
第四步:在负载均衡器(如Nginx反向代理配置)中将10%流量切到9502端口,观察错误率与响应时间——无异常后逐步提升至100%,最后停掉9501端口的老服务。










