宝塔与手动安装Workerman推送的核心差异在于扩展启用方式:宝塔需手动修改php.ini启用pcntl、posix,event扩展必须编译安装;手动安装则需在PHP编译时加入对应参数或Docker自定义启用。

Workerman主动推送信息在宝塔和手动安装有什么差异
要在宝塔面板上实现Workerman主动推送(如web-msg-send消息推送服务),不能只复制代码就完事——宝塔不提供现成的推送能力,它只负责提供PHP运行环境;而手动安装指从Linux命令行逐项配置底层依赖,两者根本差异在于:宝塔帮你省了Web服务器、PHP版本、MySQL等基础组件的安装时间,但【pcntl、posix、event三个扩展必须手动启用或编译,宝塔界面点“安装”无效】。
宝塔环境下部署web-msg-send推送服务
第一步:下载web-msg-send包,解压后整体放入网站根目录或vendor目录均可,路径不影响功能,但需确保PHP能读取到所有文件。
第二步:进入宝塔 → 软件商店 → 找到你正在使用的PHP版本(例如PHP 8.2)→ 点击“设置” → “配置文件”,打开对应php.ini。
第三步:搜索extension=pcntl和extension=posix,删掉前面的分号;若要用高并发长连接,还需手动编译安装event扩展——宝塔软件商店里没有event扩展可选,必须进终端执行:yum install libevent-devel -y → 下载event源码 → /www/server/php/82/bin/phpize && ./configure --with-php-config=/www/server/php/82/bin/php-config && make && make install → 最后在php.ini加extension=event。
第四步:重启该PHP版本服务(宝塔面板里点“重载配置”或“重启”),否则修改不生效。这一步漏掉,php start.php start -d会直接报Call to undefined function pcntl_fork()退出。
手动安装Linux环境下的等效操作
方法一:用脚本一键拉起最小化环境
执行wget -qO- https://get.docker.com | sh装Docker → docker run -d --name workerman-pusher -p 2121:2121 -v $(pwd)/web-msg-send:/var/www/html php:8.2-cli php /var/www/html/start.php start -d。这种方式跳过宝塔,但要求你自行维护PHP扩展启用状态,且Docker内默认不带pcntl——得自定义Dockerfile启用--enable-pcntl编译参数。
方法二:纯命令行部署(推荐用于生产)
① 先确认系统已装libevent-devel和gcc;
② 编译安装PHP时加--enable-pcntl --enable-posix --with-event=shared参数;
③ 安装完后,php -m | grep -E "pcntl|posix|event"三者必须同时输出;
④ 运行php start.php start -d前,必须用php -r "echo extension_loaded('pcntl') ? 'ok' : 'fail';"逐个验证扩展加载结果——【任何一项返回fail,推送请求都会静默失败,浏览器收不到消息】。
推送地址和前端调用完全一致,不受部署方式影响
无论宝塔还是手动安装,只要Workerman进程跑起来,推送URL就是http://你的域名或IP:2121/?type=publish&to=1001&content=测试。
前端引入web-msg-sender.js后,调用connect()连接成功,就能收到后端发来的onmessage事件。
注意:云服务器必须在安全组放行2121端口,否则前端WebSocket连接会被拦截,控制台只显示net::ERR_CONNECTION_REFUSED,不是代码问题。

















