Workerman从3.5.3起原生支持Windows,无需pcntl/posix扩展,但必须配置PHP环境变量;Linux则必须安装pcntl和posix扩展,否则无法启动。

Windows下安装Workerman:不用装扩展,但得配好PHP环境变量
Workerman从3.5.3起原生支持Windows,不需要pcntl、posix这些Linux专属扩展,但必须确保php命令能在CMD里直接运行——也就是PHP路径已加入系统PATH环境变量。
常见错误现象:'php' 不是内部或外部命令,或运行php start.php start报错找不到autoload.php。
- 确认PHP版本 ≥ 5.3.3(推荐7.4+或8.x),用
php -v验证 - 下载Composer安装器(
Composer-Setup.exe),安装时手动指定PHP的php.exe路径(比如C:\php\php.exe) - 项目根目录执行
composer require workerman/workerman即可拉取代码,无需额外配置 - Windows下默认最大连接数为256,超限会报错
system call select exceeded the maximum number of connections 256,这是内核限制,无法绕过
Linux下安装Workerman:必须装pcntl和posix,否则直接启动失败
Linux版Workerman严重依赖pcntl和posix扩展,缺一不可。没装这两个,Worker::runAll()会直接抛出致命错误,连进程都起不来。
常见错误现象:PHP Fatal error: Call to undefined function pcntl_fork() 或 PHP Fatal error: Call to undefined function posix_getpid()。
- CentOS/RHEL系:运行
yum install php-process -y(该包同时提供pcntl和posix) - Ubuntu/Debian系:运行
apt-get install php-cli php-dev php-mbstring -y,再确认pcntl是否启用(部分PHP版本需重编译) - 用
php --ini找到php.ini位置,检查extension=pcntl.so和extension=posix.so是否已启用(通常默认开启,但CLI SAPI可能单独配置) - 务必用
curl -Ss https://www.workerman.net/check | php跑一次环境检测脚本,它比手动查扩展更可靠
跨平台迁移时最容易踩的坑:别直接拷Windows项目到Linux跑
你本地Windows开发完workerman-chat,直接把整个Applications/目录扔进Linux服务器,大概率启动失败——不是代码问题,而是Workerman底层对信号、进程、文件锁的处理在两套系统上完全不同。
关键区别:pcntl在Windows根本不存在,而Linux下没它就寸步难行;反过来,Windows版Workerman删掉了所有posix调用,但Linux版又强依赖它。
- 正确做法:在Linux服务器上全新执行
composer require workerman/workerman,再把你的业务逻辑(比如Applications/YourApp/)单独复制过去 - 绝对不要复用Windows下生成的
vendor/目录,Linux下要重新composer install - 启动命令也要改:Windows用
php start.php start,Linux建议加-d进守护模式:php start.php start -d - 注意路径分隔符:Windows用
\,Linux用/,硬编码路径如__DIR__.'\Workerman\Autoloader.php'在Linux会失败
高并发场景下Linux必须装event扩展,否则性能断崖式下跌
Linux默认用select()做I/O多路复用,单进程最多支撑1024连接;一旦WebSocket长连接数上去,CPU会飙高、响应延迟飙升,但错误日志里往往不报错,只默默变慢。
现象特征:QPS上不去、连接建立慢、top看PHP进程CPU持续90%+,但strace发现大量select(1024, ...)调用。
- CentOS:先
yum install libevent-devel -y,再pecl install event(提示Include libevent OpenSSL support时输no) - Ubuntu:先
apt-get install libevent-dev -y,再pecl install event - 装完后在
php.ini末尾加extension=event.so,重启PHP-CLI(不是PHP-FPM) - event扩展只对Linux有效,Windows装了也加载不了,别白费功夫
Worker::stop()可能不触发onWorkerStop,Linux下kill -USR1能平滑重启但Windows没这信号。这些细节不写进日志,也不报错,只能靠压测和strace / Process Monitor抓。


















