如何用RoadRunner加速Laravel应用

RoadRunner是一个用Go语言实现的高性能PSR-7服务器,你没看错,是Go语言实现的。

RoadRunner首先用Go实现了一个高性能的服务器,然后通过goridge IPC把请求转发给多个PHP CLI Worker,Worker会把请求重新封装成PSR-7 Request交给框架进行处理。

娱乐测试

使用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 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 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 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

  

如何加速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:

<?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);

    }

}

  

运行rr serve -v搞定。

原文地址:https://www.cnblogs.com/a609251438/p/12620912.html

时间: 2024-09-30 02:01:40

如何用RoadRunner加速Laravel应用的相关文章

如何用ccache加速cocos2d-x android版本的编译

以下步骤在MAC下测试通过: 首先是安装CCache, 可以用homebrew brew install --HEAD ccache 也可以用源码安装 git clone https://github.com/jrosdahl/ccache.git cd ccache ./autogen.sh ./configure make make install 如果提示autoheader找不到,要先装个automake brew install automake 当然,如果提示brew找不到,要先装一

react+laravel与服务端渲染的思考

1.首先 controller 几乎不写代码是不可能的.我现在就是 react.js 和 laravel 一起用,前后端完全分离的. 用 react.js 搭建前端视图,然后用 ajax 或者 fetch 来和 laravel 通信.laravel 写的接口代码几乎都在 controller 里面. 2.不要 react.js 和 laravel 的 blade 混写,要么要么完全分离,要么就完全用 blade 不然项目大一点痛苦就来了. 3.更不要想用 laravel 来服务端渲染 react

转:Laravel 项目开发规范

文件介绍很好 值得细细看看 https://www.jianshu.com/p/e464a35e5ed2 https://learnku.com/docs/laravel-specification/5.5 一. 说明 以下内容大部分引用Laravel China社区的文章 - 分享下团队的开发规范 ——<Laravel 项目开发规范>.相对而言,上面引用的文章的规范更加严格,但考虑到目前的情况,会适当地对一些规范进行更改和增删. 二. 目的 暂无 三. 优点 规范有一下优点: 高效编码 -

利用GDAL实现影像的几何校正

一.概述 遥感影像和地理坐标进行关联的方式一般有好几种,一种是直接给出了仿射变换系数,即6个参数,左上角地理坐标,纵横方向上的分辨率,以及旋转系数.在这种情况下,求出某一像素点的地理坐标非常容易,直接用公式可以求出,具体代码如下: void CPL_STDCALL GDALApplyGeoTransform(double *padfGeoTransform, double dfPixel, double dfLine, double *pdfGeoX, double *pdfGeoY ) { *

疫情在家没事做推荐个学习的目录:怎么从一名码农成为架构师的必看知识点:目录大全(不定期更新)

面试题系列: 分享一波腾讯PHP面试题 2019年PHP最新面试题(含答案) Redis 高级面试题 学会这些还怕进不了大厂? 阿里面试官三年经验PHP程序员知识点汇总,学会你就是下一个阿里人! php面试题之PHP核心技术 掌握 Redis这些 知识点,面试官一定觉得你很 NB 当面试官问你:如何进行性能优化? PHP 经典面试题集 其他: 使用 PHP 7.4 的 PHP 有什么新功能? Go 与 PHP 的语法对比 Thinkphp系列: ThinkPHP6源码分析之应用初始化 Think

在 Laravel 应用中使用 pjax 进行页面加速

说明# PHPHub 使用 pjax 来加速网页的加载, 这篇文章是在开发完此功能后做的笔记. 什么是 Pjax# .--. / ## a a ( '._) |'-- | _.\___/_ ___pjax___ ."\> \Y/|<'. '._.-' / \ \_\/ / '-' / | --'\_/|/ | _/ |___.-' | |`'` | | | | / './ /__./` | | \ | | \ | | ; | | / | | jgs |___\_.\_ `-"

使用 Swoole 来加速你的 Laravel 应用

Swoole 是为 PHP 开发的生产级异步编程框架. 他是一个纯 C 开发的扩展, 他允许 PHP 开发者在 PHP 中写 高性能,可扩展的并发 TCP, UDP, Unix socket, HTTP, WebSocket 服务, 而不需要拥有太多的非阻塞 I/O 编程和低级别的 Linux 内核知识. 你可以把 Swoole 想象成 NodeJS, 但对于 PHP 来说将有更高性能. 为什么要在 Swoole 上运行 Laravel?下图展示了 PHP 的生命周期.正如你所看到的那样,当你每

使用 swoole 加速你的 laravel

在此前的另外一篇文章讨论过 opcache:php 性能优化之opcache - 让你的php性能提升 50% 再来复习一下吧,导致 php 慢的各种因素中解析性语言的特性可以说是罪魁祸首,再加上,每次请求完都释放请求时所加载的全部文件,因此也就显得更慢了. 后来我们有了 opcache,使用这个的话,请求时间大概会缩短到原来的一半,但是我们会发现其实花的时间看起来还是很多. 这是为什么呢?原因在于,opcache 只是省去了解析文件的时间,实际运行的时候,我们还是需要去把相同的代码又跑一遍,具

每个人都是超级英雄-《技巧:如何用一年的时间获得十年的经验》

读到这本<技巧:如何用一年的时间获得十年的经验>非常偶然,第一次看到这本书是在朋友茶茶的朋友圈里,于是关注了泰尼大哥的公众号,后来在腾格里沙漠之旅回来的机场上,自己带的书已看完,在机场书店转了好几圈才相中的这本书,原因有很多,但是我更相信人与书的相遇也是一种缘分,甚至与书的作者交流更是. 本书通篇没有什么的废话,更多的是方法论,以及通过真人真事折射出的道理,包括前妻的故事,公司CTO的故事等等.一直不认同文笔好的人是那种词藻华丽的“作家”,而是那种接地气的行文方式,读此书,有种邻家大哥跟你讲道