WebRotor 是一个 PHP 库,支持在共享主机上实现应用的异步执行。 众所周知,shared hosting 有许多使用限制,但这个专用程序甚至可以在共享主机上带来异步功能的所有优势。
WebRotor 的核心原理是,当应用接收到请求时,索引文件不会直接处理请求,而是将其发送到工作进程(workers),再接收返回的响应用于显示。 此外,工作进程实际上由同一个索引文件的代码实现。 这些工作进程是常见的类似 CRON 的进程,这些在几乎每个主机服务中都可以找到。 配置这些工作进程的区别仅在于主机服务管理面板的界面设计差异。
为了确保使用此技术启动的应用程序正常运行,必须开发支持异步模式。
在异步模式中,已加载的框架配置、类、初始化的服务和缓存的数据将被重用,从而显著加速性能。
但是,也存在一些特点,例如需要更加密切地监控内存泄漏并消除阻塞操作,许多熟悉的第三方库不支持异步模式。
在应用程序的逻辑部分存储状态变得不合适,尤其是当它与请求相关时。
框架的 RollbackInterface 旨在每次异步请求后重置状态。
要使用 WebRotor,需要修改文件 /public_html/index.php(这是共享主机上索引文件的假定路径),以让 HLEB2 框架在循环中运行。 这是一个基本的工作示例:
此代码使用了 HTTP 客户端库 nyholm/psr7 和 nyholm/psr7-server,需要额外安装。
为完成该配置,还需要在主机上启动 “workers”,这些实际上是主机服务提供的类似 CRON 的进程。 通常,它们在主机管理面板中配置,尽管界面可能不同,但原则相同。你需要以两分钟的间隔启动两个处理程序(如前述设置):
*/2 * * * * /usr/local/bin/php7.2 /my-project/public_html/index.php --id=1
*/2 * * * * /usr/local/bin/php7.2 /my-project/public_html/index.php --id=2
这两个进程的唯一区别是工作进程的ID编号。完成后,所有传入的应用请求会由两个异步工作进程处理。
更多细节请参考库文档:github.com/phphleb/webrotor
在本地开发中,可以不运行工作进程(workers),因为如果它们未运行或处于非激活状态,请求将以通常的方式处理。 这样,在本地可以使用常规的调试工具,例如 xDebug。
← 共享主機 FrankenPHP →