composer不能直接安装swoole扩展,必须先通过pecl或源码编译安装c扩展并启用php.ini配置,再用composer安装封装层如swooletw/laravel-swoole;镜像配置需满足-g、url末尾/、无项目级repositories覆盖三条件;swoole常驻内存下autoload须在启动前固化,worker重启不重建autoloader实例。

Composer 不能装 Swoole 扩展,但必须配对使用
直接 composer require swoole 只会装一个空壳包(比如 swoole/ide-helper),运行时照样报 Class 'Swoole\Http\Server' not found。Swoole 是 C 扩展,必须先用 pecl install swoole 或源码编译安装,并确保 php.ini 启用了 extension=swoole,再用 php -m | grep swoole 确认加载成功。
之后才能通过 Composer 安装封装层,比如:
-
swooletw/laravel-swoole(Laravel 场景) -
hyperf/hyperf-skeleton(推荐从骨架初始化,不是require hyperf/hyperf) -
easyswoole/easyswoole(需配合php vendor/bin/es start启动)
漏掉底层扩展,Composer 装得再快也起不来——镜像只管下载,不管加载。
换 Composer 镜像不生效?三处必查
执行 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 后仍慢,大概率卡在这三点:
- 命令漏了
-g:没加就是改当前项目,不是全局 - URL 少了末尾
/:写成https://mirrors.aliyun.com/composer会静默 404,不报错但无限等待 - 项目级
composer.json里有"repositories"字段:它会完全屏蔽全局镜像,composer diagnose显示Repo packagist.org is default就是这个原因
验证是否真走镜像:跑 composer require monolog/monolog -vvv 2>&1 | grep "GET\|Downloading",看到 mirrors.aliyun.com 才算到位。
Swoole 常驻进程下,autoload 必须提前固化
传统 Web 项目每次请求都重载 autoload,Swoole 不行——vendor/autoload.php 只执行一次,后续类修改、命名空间挪动、新增文件都不会自动刷新映射。
常见症状:Class not found、加载旧版本类、Cannot redeclare class。解决方式:
- 启动前调用
$loader->setPsr4()重置 PSR-4 映射(开发期配合 inotify) - 禁用运行时
require,所有类文件必须在start()前就位 - 把
"files"自动加载脚本移到onWorkerStart回调里执行,避免多 Worker 重复注册全局函数 - 检查
vendor/composer/autoload_psr4.php是否有冲突条目(比如两个包声明同一命名空间)
最易忽略的是:reload_async 或 max_request 触发的 Worker 重启,不会重建 autoloader 实例——它还是进程启动那一刻的状态。
Hyperf/Laravel-Swoole 等框架启动失败,先盯这三配置
不是装完包就能跑,几个硬性配置点不设对,服务根本起不来:
- Laravel +
swooletw/laravel-swoole:必须设APP_URL=http://127.0.0.1:1215(不能用localhost),且SWOOLE_HTTP_HOST/SWOOLE_HTTP_PORT要显式写进.env - Hyperf:必须用
composer create-project hyperf/hyperf-skeleton初始化,直接require hyperf/hyperf会版本错配,尤其 Swoole 版本和hyperf/framework锁定不一致 - Redis 连接:Laravel 中
redis.scheme必须设为tcp,不能用unixsocket;Hyperf 中hyperf/redis必须配hyperf/cache和对应config/autoload/cache.php
启动报错第一眼看 php --ri swoole 输出,没 Version 行就别往下折腾 Composer —— 扩展没装好,后面全是白忙。











