文档/启动应用程序/RoadRunner

RoadRunner

RoadRunner 是一个高性能的 PHP 应用服务器、负载均衡器和进程管理器。
RoadRunner 是用 Go 编写的,易于安装,并且功能上替代了 PHP-FPM。 它支持 xDebug 及其替代品,以及诸如 DatadogNew Relic 的性能分析和监控工具。 更多详情请参见 RoadRunner文档

为了确保使用此技术启动的应用程序正常运行,必须开发支持异步模式。

在异步模式中,已加载的框架配置、类、初始化的服务和缓存的数据将被重用,从而显著加速性能。
但是,也存在一些特点,例如需要更加密切地监控内存泄漏并消除阻塞操作,许多熟悉的第三方库不支持异步模式。
在应用程序的逻辑部分存储状态变得不合适,尤其是当它与请求相关时。

框架的 RollbackInterface 旨在每次异步请求后重置状态

要安装 RoadRunner 的服务器资源,请使用官方仓库: github.com/roadrunner-server/roadrunner

对于 RoadRunner,您需要修改文件 /public/index.php 以便让 HLEB2 框架在循环中运行。
基本工作的示例:

<?php
// File /public/index.php

use Spiral\RoadRunner;
use 
Nyholm\Psr7;

ini_set('display_errors''stderr');

include 
__DIR__ "/../vendor/autoload.php";

$worker RoadRunner\Worker::create();
$psrFactory = new Psr7\Factory\Psr17Factory();

$psr7 = new RoadRunner\Http\PSR7Worker($worker$psrFactory$psrFactory$psrFactory);

// Framework initialization outside the loop.
$framework = new Hleb\HlebAsyncBootstrap(__DIR__);

while (
$request $psr7->waitRequest()) {
    try {
        
// Getting an object with a response.
        
$response $framework->load($request)->getResponse();

        
// Convert the framework response to a handler format.
        
$psr7->respond(new Psr7\Response(...$response->getArgs()));

    } catch (
\Throwable $e) {
        
$psr7->respond(new Psr7\Response(500, [], 'Something Went Wrong!'));
        
$framework->errorLog($e);
    }
}

对于 RoadRunner,还需要在项目根目录创建一个配置文件 .rr.yaml (假设编译后的服务器文件名为 rr 也在该目录下)。
.rr.yaml 中最小工作配置的示例:

version: '3'
server:
    command: 'php ./public/index.php'
http:
    address: :8088
    middleware:
        - gzip
        - static
    static:
        dir: public
        forbid:
            - .php
            - .htaccess
    pool:
        num_workers: 6
        max_jobs: 64
        debug: false
        supervisor:
            max_worker_memory: 5
metrics:
    address: '127.0.0.1:2113'

在此配置中,RoadRunner 通过设置允许的最大内存来限制单个进程(worker)的操作:http.pool.supervisor.max_worker_memory,单位为兆字节。 因此,如果进程超出了此限制,RoadRunner 将正确地终止它并继续下一个。

使用控制台命令启动 RoadRunner 服务器:

$./rr serve

根据配置,应用程序可以通过以下地址访问:
http://localhost:8088

服务器的监控指标使用 Prometheus 格式:
http://localhost:2113

通过 Apache 启动 Swoole 服务器

页面翻译:chatgpt 4-o
返回顶部