Home > PHP Framework > Laravel > body text

How to speed up Laravel applications with RoadRunner

藏色散人
Release: 2020-04-02 13:55:12
forward
3658 people have browsed it

How to speed up Laravel applications with RoadRunner

RoadRunner is a high-performance PSR-7 server implemented in Go language. You read that right, it is implemented in Go language.

RoadRunner first uses Go to implement a high-performance server, and then forwards the request to multiple PHP CLI Workers through goridge IPC. The Worker will re-encapsulate the request into a PSR-7 Request and hand it over to the framework for processing.

Recommended: laravel tutorial

Entertainment test

Use siege to test Laravel’s Welcome page, 250 concurrent users, continuous 30 seconds, comparing Nginx FPM and 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.
Copy after login

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
Copy after login

How to speed up Laravel application

RoadRunner installation

RoadRunner has provided precompiled executable files. Just download the version corresponding to the platform. The configuration file can be provided by RoadRunner: Using RoadRunner.

Laravel Configuration

Installation dependencies:

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

Create a psr-worker.php in the Laravel project, and modify the code from tobias-kuendig:

<?php
require __DIR__ . "/vendor/autoload.php";
use Symfony\Bridge\PsrHttpMessage\Factory\DiactorosFactory;
use Symfony\Bridge\PsrHttpMessage\Factory\HttpFoundationFactory;
$relay = new Spiral\Goridge\StreamRelay(STDIN, STDOUT);
$psr7 = new Spiral\RoadRunner\PSR7Client(new Spiral\RoadRunner\Worker($relay));
$app = require_once __DIR__ . &#39;/bootstrap/app.php&#39;;
$kernel = $app->make(Illuminate\Contracts\Http\Kernel::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 = Illuminate\Http\Request::createFromBase($symfonyReq);
        $response = $kernel->handle($request);
        $psr7factory = new DiactorosFactory();
        $psr7response = $psr7factory->createResponse($response);
        $psr7->respond($psr7response);
    } catch (\Throwable $e) {
        $psr7->getWorker()->error((string)$e);
    }
}
Copy after login

Run rr serve -v Done.

The above is the detailed content of How to speed up Laravel applications with RoadRunner. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:segmentfault.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template