Maison  >  Article  >  développement back-end  >  Accélérez les applications Laravel à l'aide de RoadRunner

Accélérez les applications Laravel à l'aide de RoadRunner

不言
不言original
2018-07-06 16:34:183232parcourir

Cet article présente principalement l'utilisation de RoadRunner pour accélérer les applications Laravel. Il a une certaine valeur de référence. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer

RoadRunner est un programme haute performance implémenté. en langage Go Le serveur PSR-7, vous avez bien lu, est implémenté en langage Go.

RoadRunner implémente d'abord un serveur hautes performances à l'aide de Go, puis transmet la requête à plusieurs PHP CLI Workers via Goridge IPC. Le Worker réencapsulera la requête dans une requête PSR-7 et la remettra à. le cadre du traitement.

Test de divertissement

Utilisez le siège pour tester la page d'accueil de Laravel, 250 utilisateurs simultanés, d'une durée de 30 secondes, en comparant Nginx + FPM et 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 travailleurs) :

$ 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

Comment accélérer l'application Laravel

Installation de RoadRunner

RoadRunner a fourni des fichiers exécutables précompilés. Il suffit de télécharger la version correspondant à la plateforme. Le fichier de configuration peut être fourni par RoadRunner : Utilisation de RoadRunner.

Configuration Laravel

Dépendances d'installation :

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

Créez un psr-worker.php dans le projet Laravel, et la modification du code vient de 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);
    }
}

Exécutez rr serve -v et c'est fait.

Ce qui précède représente l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'étude de chacun. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois !

Recommandations associées :

Résumé de l'utilisation du système d'événements Laravel

L'applet Laravel WeChat obtient les détails de l'utilisateur et le code d'applet paramétré Analyse étendue

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:Description du minuteur PHPArticle suivant:Description du minuteur PHP