ReactPHP不是开箱即用的异步环境,而是解耦的底层库集合;需按需安装独立组件(如react/event-loop、react/http),手动启动事件循环,Windows下默认使用StreamSelectLoop。

ReactPHP 不能通过 Composer “安装”成一个开箱即用的“异步PHP编程环境”——它只是提供异步I/O能力的底层库,没有内置HTTP服务器、事件循环自动启动或开发服务器。直接 composer require react/http 后跑不起来,是常态。
为什么 composer require react/react 不起作用?
ReactPHP 没有名为 react/react 的根包。它的组件全部解耦为独立包,比如 react/event-loop、react/http、react/socket。试图安装不存在的包会报错:
Could not find package react/react in a version matching "dev-main"
正确做法是按需安装具体组件:
-
composer require react/event-loop(必须,事件循环是基石) -
composer require react/http(如需HTTP服务) -
composer require react/promise(如需链式异步逻辑)
别贪心一次性全装——很多组件有兼容性约束,react/http ^1.0 要求 react/event-loop ^1.2,但 ^2.0 就不兼容。
立即学习“PHP免费学习笔记(深入)”;
运行 ReactPHP 脚本前必须手动启动事件循环
不同于 Node.js 或 Swoole,ReactPHP 不会自动运行事件循环。你写完 $server->on('request', ...) 后,如果不显式调用 $loop->run(),脚本立即退出,什么都不会监听。
典型错误写法:
$server = new Server($loop, function (ServerRequestInterface $request) { /* ... */ });正确写法必须包含:
$loop = React\EventLoop\Factory::create();
$server = new Server($loop, function (ServerRequestInterface $request) { /* ... */ });
$loop->run(); // ← 这行不能少
漏掉这行,进程静默结束,端口根本不会监听。
Windows 下 ext-event 扩展不可用,别白费劲
ReactPHP 官方推荐的高性能扩展 ext-event 在 Windows 上无法编译安装(PHP 官方不提供 Windows 的 libevent 构建支持)。强行尝试会卡在 phpize 或报 event.h not found。
Windows 用户应直接使用默认的 StreamSelectLoop(它基于 stream_select(),跨平台可用):
- 无需额外扩展
- 性能足够应付开发和中低负载
- 所有 ReactPHP 组件默认 fallback 到它
除非你在 Linux 生产环境且需要万级并发,否则不用折腾 ext-event。
ReactPHP 的“环境搭建”本质是选对组件 + 显式驱动循环 + 接受它不封装 HTTP 服务生命周期的事实。最简能跑通的脚本只有 10 行左右,但每行都得亲手写清楚——它不替你做决定,也不掩盖细节。











