Workerman 不推荐用 composer require workerman/workerman 安装,因官方未维护该包,易拉取错误版本或空包;真正关键的是通过 start.php 正确加载并执行 Worker::runAll(),且需确保 PHP CLI 启用 pcntl/posix 扩展。

Workerman 可以用 composer require workerman/workerman 安装,但**不推荐作为首选方式**——它能下载代码,但极易因路径、扩展、版本或环境问题导致启动失败。真正跑起来的关键从来不是“装没装上”,而是“start.php 能不能被 PHP CLI 正确加载并执行 Worker::runAll()”。
为什么 composer require workerman/workerman 常见失败
这不是 Composer 本身的问题,而是 Workerman 的设计决定的:
-
workerman/workerman包在 Packagist 上存在,但官方未维护它;你拉下来的可能是 fork、旧版甚至空包 - Composer 只管下载和生成 autoload,它不会检查
pcntl和posix扩展是否启用 —— 而这两个是 Workerman 运行的硬性前提 - 安装后默认不带
start.php入口文件,也不提供workerman命令行工具;你得到的只是一堆类文件,没有可执行逻辑 - 常见报错如
Call to undefined function pcntl_fork()或require(): Failed opening required 'Workerman/Autoloader.php',本质是环境缺失或路径引用错误,不是 Composer 没装好
如果坚持用 Composer,必须做这三件事
仅当你的项目已重度依赖 Composer(比如 Laravel、Symfony),且 Workerman 是其中一环时,才考虑这种方式。否则直接 git clone 更干净。
- 用
composer create-project workerman/workerman替代require:它会拉取带完整骨架(含start.php)的官方模板,避免手动补文件 - 在
start.php开头显式引入 Composer 自动加载:require_once __DIR__ . '/vendor/autoload.php';,而不是官方示例里的require_once './Workerman/Autoloader.php' - 确保 PHP CLI 模式启用扩展:
php -m | grep -E "pcntl|posix";Windows 用户请改用 WSL2,别在 CMD 里硬扛
workerman/websocket 等扩展包怎么配
Workerman 核心包(workerman/workerman)不包含 WebSocket 协议解析能力。要支持浏览器直连,必须额外引入:
-
composer require workerman/websocket—— 注意它和核心包的主版本号必须一致(v4.x 对 v4.x,v5.x 对 v5.x) - WebSocket 服务不能复用 TCP Worker:需单独 new
Websocket\Connection实例,并绑定onMessage回调 - 别混用
workerman/thinkphp这类封装包:它们常锁死 Workerman 版本,出问题时连进程模型都看不到,调试成本翻倍
最易被忽略的一点:Workerman 启动脚本(无论叫 start.php 还是 server.php)必须由 PHP CLI 直接执行,且必须调用 Worker::runAll() 才会进入事件循环。Composer 装得再整齐,漏掉这一句,进程就秒退 —— 这不是配置问题,是设计使然。


















