Heim > Artikel > Backend-Entwicklung > Beschleunigen Sie Laravel-Anwendungen mit RoadRunner
Dieser Artikel stellt hauptsächlich die Verwendung von RoadRunner zur Beschleunigung von Laravel-Anwendungen vor. Jetzt kann ich ihn mit Ihnen teilen.
RoadRunner ist ein leistungsstarkes Programm In der Go-Sprache ist der PSR-7-Server, wie Sie richtig gelesen haben, in der Go-Sprache implementiert.
RoadRunner implementiert zunächst einen Hochleistungsserver mit Go und leitet die Anfrage dann über goridge IPC an mehrere PHP-CLI-Worker weiter. Der Worker kapselt die Anfrage erneut in eine PSR-7-Anfrage und übergibt sie an den Rahmen für die Verarbeitung.
Verwenden Sie Siege, um die Willkommensseite von Laravel, 250 gleichzeitige Benutzer, 30 Sekunden lang zu testen und Nginx + FPM und RoadRunner zu vergleichen.
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 Arbeiter):
$ 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
RoadRunner stellt bereits eine vorkompilierte ausführbare Datei bereit. Laden Sie einfach die der Plattform entsprechende Version herunter. Die Konfigurationsdatei kann von RoadRunner bereitgestellt werden: Mit RoadRunner.
Installationsabhängigkeiten:
composer require spiral/roadrunner zendframework/zend-diactoros symfony/psr-http-message-bridge
Erstellen Sie ein psr-worker.php
im Laravel-Projekt und ändern Sie den Code von 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__ . '/bootstrap/app.php'; $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); } }
Führen Sie rr serve -v
aus, um es zu erledigen.
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er für das Studium aller hilfreich ist. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.
Verwandte Empfehlungen:
Zusammenfassung der Nutzung des Laravel-Ereignissystems
Das obige ist der detaillierte Inhalt vonBeschleunigen Sie Laravel-Anwendungen mit RoadRunner. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!