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 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | $ siege --no-parser -c 250 -t 30s http:
** 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) :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | $ siege --no-parser -c 250 -t 30s http:
** 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 :
1 | 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 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | <?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 );
}
}
|
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!