如何用RoadRunner加速Laravel应用

发布时间 - 2020-04-02 00:00:00    点击率:

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 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:

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搞定。


# laravel  # php  # nginx  # 封装  # using  # Go语言  # 并发  # 高性能  # 是一个  # 多个  # 你没  # 会把  # 创建一个  # 配置文件  # 看错  # 转发给  # 实现了 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何快速登录WAP自助建站平台?  在线教育网站制作平台,山西立德教育官网?  如何在自有机房高效搭建专业网站?  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  高防服务器:AI智能防御DDoS攻击与数据安全保障  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  Laravel如何使用Collections进行数据处理?(实用方法示例)  Laravel Seeder填充数据教程_Laravel模型工厂Factory使用  如何用西部建站助手快速创建专业网站?  Android 常见的图片加载框架详细介绍  Laravel如何使用withoutEvents方法临时禁用模型事件  Laravel如何为API编写文档_Laravel API文档生成与维护方法  JavaScript如何实现类型判断_typeof和instanceof有什么区别  动图在线制作网站有哪些,滑动动图图集怎么做?  Laravel如何使用查询构建器?(Query Builder高级用法)  Laravel如何使用Blade组件和插槽?(Component代码示例)  Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置  如何在阿里云虚拟服务器快速搭建网站?  如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】  php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  高性能网站服务器部署指南:稳定运行与安全配置优化方案  Laravel如何构建RESTful API_Laravel标准化API接口开发指南  javascript中闭包概念与用法深入理解  如何快速搭建高效香港服务器网站?  西安专业网站制作公司有哪些,陕西省建行官方网站?  如何在云指建站中生成FTP站点?  Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】  Laravel如何升级到最新版本?(升级指南和步骤)  魔方云NAT建站如何实现端口转发?  如何制作一个表白网站视频,关于勇敢表白的小标题?  Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】  移动端脚本框架Hammer.js  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  php485函数参数是什么意思_php485各参数详细说明【介绍】  高端建站如何打造兼具美学与转化的品牌官网?  高防服务器租用如何选择配置与防御等级?  如何做网站制作流程,*游戏网站怎么搭建?  Java类加载基本过程详细介绍  如何在宝塔面板创建新站点?  Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  Laravel如何实现密码重置功能_Laravel密码找回与重置流程  独立制作一个网站多少钱,建立网站需要花多少钱?  laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法  如何快速搭建FTP站点实现文件共享?  如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】  js代码实现下拉菜单【推荐】  Python进程池调度策略_任务分发说明【指导】