zoukankan      html  css  js  c++  java
  • 如何用RoadRunner加速Laravel应用

    RoadRunner是一个用Go语言实现的高性能PSR-7服务器,你没看错,是Go语言实现的。

    RoadRunner首先用Go实现了一个高性能的服务器,然后通过goridge IPC把请求转发给多个PHP CLI Worker,Worker会把请求重新封装成PSR-7 Request交给框架进行处理。

    娱乐测试

    使用siege测试Laravel的Welcome页面,250个并发用户,持续30秒,对比Nginx + FPM和RoadRunner。

    Nginx + FPM:
    
    $ siege --no-parser -c 250 -t 30s http://127.0.0.1:3000/  > /dev/null
    
    ** SIEGE 4.0.4
    
    ** Preparing 250 concurrent users for battle.
    
    The server is now under siege...
    
    Lifting the server siege...
    
    Transactions:                   2032 hits
    
    Availability:                  97.83 %
    
    Elapsed time:                  29.19 secs
    
    Data transferred:               4.51 MB
    
    Response time:                  2.64 secs
    
    Transaction rate:              69.61 trans/sec
    
    Throughput:                     0.15 MB/sec
    
    Concurrency:                  183.50
    
    Successful transactions:        2032
    
    Failed transactions:              45
    
    Longest transaction:           27.34
    
    Shortest transaction:           0.
    

      

    RoadRunner(4 worker):

    $ siege --no-parser -c 250 -t 30s http://127.0.0.1:8080/  > /dev/null
    
    ** SIEGE 4.0.4
    
    ** Preparing 250 concurrent users for battle.
    
    The server is now under siege...
    
    Lifting the server siege...
    
    Transactions:                  61417 hits
    
    Availability:                 100.00 %
    
    Elapsed time:                  29.26 secs
    
    Data transferred:             135.95 MB
    
    Response time:                  0.12 secs
    
    Transaction rate:            2099.01 trans/sec
    
    Throughput:                     4.65 MB/sec
    
    Concurrency:                  249.06
    
    Successful transactions:       61417
    
    Failed transactions:               0
    
    Longest transaction:            0.20
    
    Shortest transaction:           0.05
    

      

    如何加速Laravel应用

    RoadRunner安装

    RoadRunner已经提供了预编译的执行文件,下载对应平台的版本即可,配置文件可用RoadRunner提供的:Using RoadRunner.

    Laravel配置

    安装依赖:

    composer require spiral/roadrunner zendframework/zend-diactoros symfony/psr-http-message-bridge
    

      

    在Laravel项目创建一个psr-worker.php,代码修改来自tobias-kuendig:

    <?php
    
    require __DIR__ . "/vendor/autoload.php";
    
    use SymfonyBridgePsrHttpMessageFactoryDiactorosFactory;
    
    use SymfonyBridgePsrHttpMessageFactoryHttpFoundationFactory;
    
    $relay = new SpiralGoridgeStreamRelay(STDIN, STDOUT);
    
    $psr7 = new SpiralRoadRunnerPSR7Client(new SpiralRoadRunnerWorker($relay));
    
    $app = require_once __DIR__ . '/bootstrap/app.php';
    
    $kernel = $app->make(IlluminateContractsHttpKernel::class);
    
    while ($req = $psr7->acceptRequest()) {
    
        try {
    
            $httpFoundationFactory = new HttpFoundationFactory();
    
            if (strpos($req->getHeaderLine("content-type"), "application/json") === 0) {
    
                $body = $req->getBody();
    
                $parsedBody = json_decode($body, true);
    
                $req = $req->withParsedBody($parsedBody);
    
            }
    
            $symfonyReq = $httpFoundationFactory->createRequest($req);
    
            $request = IlluminateHttpRequest::createFromBase($symfonyReq);
    
            $response = $kernel->handle($request);
    
            $psr7factory = new DiactorosFactory();
    
            $psr7response = $psr7factory->createResponse($response);
    
            $psr7->respond($psr7response);
    
        } catch (Throwable $e) {
    
            $psr7->getWorker()->error((string)$e);
    
        }
    
    }
    

      

    运行rr serve -v搞定。

  • 相关阅读:
    (转)使用vsphere client 克隆虚拟机
    【转】VIM高级用法笔记
    Oracle RAC的Failover
    /dev/shm过小导致ORA00845错误解决方法
    (转)How to use udev for Oracle ASM in Oracle Linux 6
    ORACLE十进制与十六进制的转换
    解决Oracle RAC不能自动启动的问题
    RAC集群时间同步服务
    db link hang的解决方法
    【转载】Oracle数据恢复 Linux / Unix 误删除的文件恢复
  • 原文地址:https://www.cnblogs.com/a609251438/p/12620912.html
Copyright © 2011-2022 走看看