必须手动配置worker_num、task_worker_num等参数并确保PHP-FPM与Swoole进程不冲突:先在宝塔软件商店安装Swoole并重启PHP,验证php --ri swoole显示enabled;再同步修改CLI与FPM的php.ini启用extension=swoole.so和swoole.enable_coroutine=On;最后编写含worker_num与task_worker_num设置的swoole-server.php脚本,放行9502端口,以www用户启动并设开机自启。

你需要在宝塔面板中部署支持高并发的Swoole多进程服务,但默认安装的Swoole扩展仅提供基础协程能力,无法直接启用多进程模型——必须手动配置worker_num、task_worker_num等核心参数,并确保PHP-FPM与Swoole进程不冲突。
确认Swoole已正确安装并启用
登录宝塔面板 → 左侧菜单点击「软件商店」→ 找到你正在使用的PHP版本(如PHP 80)→ 点击右侧「设置」→ 切换至「安装扩展」选项卡 → 搜索swoole → 若显示“已安装”,跳过;若未安装,点击「安装」→ 安装完成后务必点击「重启PHP」(注意是重启,不是重载)。
执行验证命令:/www/server/php/80/bin/php --ri swoole,输出中必须包含enabled和具体版本号(如5.1.5),否则后续所有配置均无效。
【关键前提】若命令行能查到swoole但Web页面报错“Class 'Swoole\Server' not found”,说明FPM与CLI使用了不同php.ini,必须同步修改两者配置。
编辑PHP配置文件启用Swoole全局支持
打开宝塔面板 → 「网站」→ 「PHP管理」→ 找到对应PHP版本 → 点击「配置文件」→ 在文件末尾新增两行:
extension=swoole.so
swoole.enable_coroutine=On
保存后返回PHP管理页,点击「重载配置」。这一步确保Swoole类库在Web请求中可被加载,且协程功能默认开启——这是多进程模式下任务调度的基础。
编写多进程Swoole服务脚本
在网站根目录(如/www/wwwroot/your-site.com)新建文件swoole-server.php,内容如下:
<?php
$server = new Swoole\Server("0.0.0.0", 9502);
$server->set([
"worker_num" => 4,
"task_worker_num" => 2,
"daemonize" => true,
"log_file" => "/www/wwwlogs/swoole.log"
]);
$server->on('start', function ($server) {
echo "Swoole server started at http://127.0.0.1:9502\n";
});
$server->on('receive', function ($server, $fd, $from_id, $data) {
Swoole 6.1.1 是一个专为 PHP 设计的高性能事件驱动并发网络引擎。作为稳定版,它修复了编译时对 zlib 依赖的缺失及 curl 模块的内存安全风险。该版本支持协程、多线程与多进程架构,内置 TCP/HTTP/WebSocket 服务器,能够显著提升 PHP 在微服务、实时通信等场景下的执行效率与并发能力。
$server->send($fd, "Received: " . $data);
});
$server->start();
其中worker_num决定主工作进程数,task_worker_num决定异步任务进程数——这两个值必须根据服务器CPU核心数设定,例如4核服务器建议设为worker_num=4、task_worker_num=2,过高会导致进程争抢资源,过低则无法压满CPU。
配置防火墙与端口放行
方法一:宝塔内置防火墙
宝塔面板 → 「安全」→ 「放行端口」→ 输入9502 → 点击「放行」。
方法二:系统防火墙(CentOS 7+)
SSH执行:firewall-cmd --permanent --add-port=9502/tcp && firewall-cmd --reload。
【不可逆操作】若使用iptables,请勿直接清空规则,应仅添加新规则,避免误关SSH端口导致失联。
启动并守护Swoole多进程服务
第一步:赋予脚本执行权限
chmod +x /www/wwwroot/your-site.com/swoole-server.php
第二步:切换到网站根目录
cd /www/wwwroot/your-site.com
第三步:以www用户身份启动服务(避免root权限运行)
sudo -u www /www/server/php/80/bin/php swoole-server.php
第四步:验证进程是否生效
ps aux | grep swoole-server.php,应看到至少4个worker进程和2个task进程,以及1个master进程。
第五步:设置开机自启(防止服务器重启后服务中断)
编辑/etc/rc.local,在exit 0前插入:
sudo -u www /www/server/php/80/bin/php /www/wwwroot/your-site.com/swoole-server.php > /dev/null 2>&1 &

















