Composer怎么安装ReactPHP 异步PHP编程环境搭建【教程】

9次阅读

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

Composer怎么安装ReactPHP 异步PHP编程环境搭建【教程】

ReactPHP 不能通过 composer “安装”成一个开箱即用的“异步PHP编程环境”——它只是提供异步I/O能力的底层库,没有内置HTTP服务器、事件循环自动启动或开发服务器。直接 composer require react/http 后跑不起来,是常态。

为什么 composer require react/react 不起作用?

ReactPHP 没有名为 react/react 的根包。它的组件全部解耦为独立包,比如 react/event-loopreact/httpreact/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.jsswoole,ReactPHP 不会自动运行事件循环。你写完 $server->on('request', ...) 后,如果不显式调用 $loop->run(),脚本立即退出,什么都不会监听。

典型错误写法:

$server = new Server($loop, function (ServerRequestInterface $request) { /* ... */ });

正确写法必须包含:

$loop = ReactEventLoopFactory::create();
$server = new Server($loop, function (ServerRequestInterface $request) { /* ... */ });
$loop->run(); // ← 这行不能少

漏掉这行,进程静默结束,端口根本不会监听。

windowsext-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 行左右,但每行都得亲手写清楚——它不替你做决定,也不掩盖细节。

text=ZqhQzanResources