需在宝塔部署支持pcntl/posix/event扩展的Workerman WebSocket服务,配置web-msg-sender并用Supervisor守护,通过HTTP接口向在线客户端推送消息。

要在宝塔面板里让Workerman主动向客户端推送消息,核心不是“部署一个推送功能”,而是搭建一个可被外部调用、能实时广播或定向发送的WebSocket服务端,并确保它常驻运行、端口可达、扩展完备。跳过pcntl/posix/event任一扩展,推送逻辑根本无法触发。
确认PHP环境已支持Workerman运行
进入宝塔面板 → 软件商店 → 找到你当前项目使用的PHP版本(如7.4)→ 点击“设置” → “安装扩展”。【pcntl和posix必须启用,event必须手动编译安装】
别信软件商店里灰色不可点的选项——pcntl和posix虽是PHP内置扩展,但宝塔默认禁用;event压根不在扩展列表里。必须进SSH终端执行:
CentOS系统:yum install libevent-devel -y;Ubuntu系统:apt-get install libevent-dev -y
下载event-3.0.8.tgz源码包,解压后依次执行:/www/server/php/74/bin/phpize → ./configure --with-php-config=/www/server/php/74/bin/php-config → make && make install,最后在php.ini末尾加一行extension=event
改完php.ini后,回到宝塔面板点击对应PHP版本的“重载配置”按钮。这一步漏掉,event扩展永远不生效。
部署web-msg-sender消息推送系统
下载官方web-msg-sender包:wget http://www.workerman.net/download/senderzip,解压后上传至网站根目录外独立文件夹(例如/www/wwwroot/push-server)
编辑start_io.php,将SocketIO监听端口改为2121(或其他未被占用的端口),同时确认$sender_io = new SocketIO(2121)这一行未被注释
编辑start.php,注释掉require_once __DIR__ . '/start_web.php';这行——webServer模块纯属冗余,占资源还易冲突
保存后,在SSH中进入该目录,执行:/www/server/php/74/bin/php start.php start -d。看到Workerman[push-server/start.php] start in daemon mode即表示后台已启动
验证推送服务是否真正可用
第一步:检查三个扩展是否真加载成功。在SSH中执行:/www/server/php/74/bin/php -m | grep -E "pcntl|posix|event",必须输出三行,缺一不可
第二步:测试端口连通性。在浏览器访问http://你的服务器IP:2121,应返回JSON格式的欢迎信息;若报错或超时,立即检查宝塔「安全」页放行2121端口、云厂商安全组是否开放、防火墙是否拦截
第三步:模拟一次推送。在浏览器地址栏输入:http://你的服务器IP:2121/?type=publish&content=hello+world,如果所有已连接的WebSocket客户端收到消息,说明推送链路打通
从FastAdmin后台调用推送接口
方法一:用curl直接请求
在FastAdmin控制器中插入以下代码(替换为你的真实IP和端口):
file_get_contents("http://192.168.1.100:2121/?type=publish&to=1001&content=新订单已生成");
注意:【to参数值必须是已登录用户的唯一标识(如user_id),且该用户WebSocket连接必须在线】
方法二:封装成函数复用
新建application/common/service/PushService.php,写入:
public static function send($to, $content) { return file_get_contents("http://你的IP:2121/?type=publish&to={$to}&content=" . urlencode($content)); }
在业务逻辑完成处调用PushService::send(1001, '订单状态已更新');即可
配置Supervisor守护进程(防止意外退出)
进入宝塔面板 → 软件商店 → 搜索并安装“Supervisor” → 安装完成后点击“设置” → “添加进程”
填写名称:workerman-push
运行目录:/www/wwwroot/push-server
启动命令:/www/server/php/74/bin/php start.php start -d
运行用户:www
勾选“开机自启”和“进程异常自动重启”
点击提交后,状态显示“运行中”即表示守护成功。此时即使服务器重启或PHP进程崩溃,Supervisor也会自动拉起服务


















