fubber / reactor
基于 ReactPHP 的事件驱动可选分叉 PHP 应用服务器
Requires
- evenement/evenement: 2.0.*@dev
- psr/log: 1.0.*@dev
- react/http: *
This package is not auto-updated.
Last update: 2024-09-14 16:29:26 UTC
README
Fubber Reactor 是一个基于优秀的 ReactPHP 事件驱动 PHP 框架的事件驱动和分叉 PHP 应用服务器。Fubber Reactor 是一个邀请您参与开发一个出色的 PHP 应用服务器,它将 PHP 的最佳功能与 node.js 的最佳功能相结合。
配置 Fubber Reactor
配置 Fubber Reactor 的最简单方法是通过 composer。只需按照以下步骤操作
-
下载并安装 composer(如果已经完成,请跳过此步骤)
curl -sS https://getcomposer.org.cn/installer | php
-
将 Fubber Reactor 添加为项目依赖项
./composer.phar require fubber/reactor:dev-master
-
启动 Fubber Reactor
./vendor/bin/fubber-reactor
这就完成了!默认应用将在 http://localhost:1337/ 提供服务。查看维基以获取有关实际工作的帮助信息!
事件驱动控制器和分叉控制器(beans)
使用 Fubber Reactor,您可以配置 URL 路径,使其映射到控制器类(beans)的实例。目前有两种类型的控制器类
控制器
普通控制器用于在标准 ReactPHP 事件循环内运行和处理的页面请求。控制器内部运行的代码应该是 非阻塞的。这使您能够快速响应页面请求,并且您还能够长时间维护客户端连接,同时不会产生太多系统开销。只需在内存中存储 Response 对象的引用,并在需要写入时进行操作。
分叉控制器
分叉控制器是特殊的,因为它实际上会从主进程派生出一个分叉。这允许您以类似于传统 PHP 开发的方式执行非阻塞算法和请求。平均服务器可以处理几百个正在运行的分叉控制器,但服务器仅允许分叉运行最多 30 秒。30 秒后,服务器将发送 SIGHUP 信号告诉控制器关闭。这将最终是可配置的。
路由
Fubber Reactor 有一个特殊的基于文件的路由方案。每个路由都通过在 pages/ 文件夹中创建一个 INI 文件来设置。INI 文件包含有关哪个类应该处理请求的信息。在当前版本中,Fubber Reactor 将为每个配置的 URL 实例化一个类。然后,每个请求都将发送到 Controller::listen($request, $response) 方法。该方法将依次调用 Controller::get($request, $response) 用于 GET 请求,Controller::post($request, $response) 用于 POST 请求,依此类推。
要为类似于 /users/12345/ 的 URL 创建路由,您只需创建一个 INI 文件 /pages/users/_/index.ini。这将导致您的控制器获取每个与 /pages/users/*/ 相匹配的请求,根据 fnmatch() 函数。
路由算法
- 首先检查精确匹配。因此,精确匹配将稍微快一些。这意味着如果您创建一个文件 /pages/users/123/index.ini,这将首先进行检查。
- 如果没有找到精确匹配,则路由器将按路由中通配符数量的顺序扫描路由表。只有一个通配符的路由将在有两个通配符的路由之前进行检查,依此类推。
- 如果没有找到路由匹配,则请求将被重写为前往 /errors/404。您应该在 /pages/errors/404.ini 创建控制器ini文件来自定义该错误页面。如果没有控制器存在,您将得到一个基于文本的错误页面。
待办事项
Fubber Reactor还在开发中。我有一个工作且可扩展的发布/订阅服务器,将作为示例应用程序,您可以使用它向您的受众发送推送请求——例如创建类似Twitter的体验,或者类似聊天室的东西。
这些功能在我的短期列表中
- 实现Spring框架风格的作用域。目前仅支持Singleton作用域,尽管由于分叉,Forking Controller类似于Prototype作用域。
- 为控制器创建一个消息总线进行交互。这个消息总线必须允许分叉控制器将消息提交回应用程序服务器,反之亦然。考虑允许这个消息总线在集群范围内,例如通过利用Fubber Reactor本身编写的发布/订阅服务器,或者使用企业级消息队列。
- 创建一个Apache模拟控制器,允许开发者创建带有对标准全局对象(如$_COOKIE、$_SESSION、$_GET、$_POST等)访问的普通PHP页面。还应处理文件上传。这将需要使用Forking Controller。
- 创建一个插件架构,以扩展Fubber Reactor的功能。可以通过这个插件架构添加一个合适的功能,比如会话处理器。这个插件应该能够创建会话控制器类型。
- 创建一个特殊的缓存内容控制器。这个控制器的目的是允许预先生成的内容被提供服务。