您好,欢迎访问一九零五行业门户网

如何用RoadRunner加速Laravel应用

roadrunner是一个用go语言实现的高性能psr-7服务器,你没看错,是go语言实现的。
roadrunner首先用go实现了一个高性能的服务器,然后通过goridge ipc把请求转发给多个php cli worker,worker会把请求重新封装成psr-7 request交给框架进行处理。
推荐:laravel教程
娱乐测试
使用siege测试laravel的welcome页面,250个并发用户,持续30秒,对比nginx + fpm和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 hitsavailability: 97.83 %elapsed time: 29.19 secsdata transferred: 4.51 mbresponse time: 2.64 secstransaction rate: 69.61 trans/secthroughput: 0.15 mb/secconcurrency: 183.50successful transactions: 2032failed transactions: 45longest transaction: 27.34shortest transaction: 0.
roadrunner(4 worker):
$ 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 hitsavailability: 100.00 %elapsed time: 29.26 secsdata transferred: 135.95 mbresponse time: 0.12 secstransaction rate: 2099.01 trans/secthroughput: 4.65 mb/secconcurrency: 249.06successful transactions: 61417failed transactions: 0longest transaction: 0.20shortest transaction: 0.05
如何加速laravel应用
roadrunner安装
roadrunner已经提供了预编译的执行文件,下载对应平台的版本即可,配置文件可用roadrunner提供的:using roadrunner.
laravel配置
安装依赖:
composer require spiral/roadrunner zendframework/zend-diactoros symfony/psr-http-message-bridge
在laravel项目创建一个psr-worker.php,代码修改来自tobias-kuendig:
<?phprequire __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); }}
运行rr serve -v搞定。
以上就是如何用roadrunner加速laravel应用的详细内容。
其它类似信息

推荐信息