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

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

不言
Libérer: 2023-04-02 18:00:02
original
3330 Les gens l'ont consulté

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.
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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);
    }
}
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal