Heim  >  Artikel  >  Backend-Entwicklung  >  Beschleunigen Sie Laravel-Anwendungen mit RoadRunner

Beschleunigen Sie Laravel-Anwendungen mit RoadRunner

不言
不言Original
2018-07-06 16:34:183280Durchsuche

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.

Unterhaltungstest

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

So beschleunigen Sie die Laravel-Anwendung

RoadRunner-Installation

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.

Laravel-Konfiguration

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__ . &#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);
    }
}

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 Laravel WeChat-Applet ruft Benutzerdetails und parametrisierten Applet-Code ab. Erweiterte Analyse

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Beschreibung des PHP-TimersNächster Artikel:Beschreibung des PHP-Timers