博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用 RoadRunner 加速 Laravel 应用
阅读量:7223 次
发布时间:2019-06-29

本文共 2677 字,大约阅读时间需要 8 分钟。

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

RoadRunner首先用Go实现了一个高性能的服务器,然后通过把请求转发给多个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 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提供的:.

Laravel配置

安装依赖:

composer require spiral/roadrunner zendframework/zend-diactoros symfony/psr-http-message-bridge

在Laravel项目创建一个psr-worker.php,代码修改来自:

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

其他问题

Issue里提到了POST数据会丢失,简单地测试了一下,没有重现,兼容性方面还需持续关注。

更新1:加了JSON解析,解决POST数据丢失

转载地址:http://pikfm.baihongyu.com/

你可能感兴趣的文章
案例分享〡三拾众筹持续交付开发流程支撑创新业务
查看>>
FreeWheel业务系统微服务化过程经验分享
查看>>
移动互联网下半场,iOS开发者如何“高薪”成长?
查看>>
Atlassian是怎样进行持续交付的?且听 Steve Smith一一道来
查看>>
Web Storage相关
查看>>
[PHP内核探索]PHP中的哈希表
查看>>
Apache-drill Architechture
查看>>
WordPress 5.2 Beta 3 发布,要求 PHP 5.6.20 以上版本
查看>>
通通连起来——无处不在的流
查看>>
互联网+时代,看云计算如何改变传统行业
查看>>
ZFS ARC & L2ARC zfs-$ver/module/zfs/arc.c
查看>>
c++类默认拷贝构造函数---浅复制
查看>>
2019年最火热的Golang项目
查看>>
可实现RSSD云硬盘120万IOPS的SPDK IO路径优化实践
查看>>
Vue项目部署遇到的坑(你肯定会遇到!)
查看>>
资源分享计划第三期 0511
查看>>
awk 文本处理
查看>>
【JSConf EU 2018】主题总结 (部分主题已有中文文章)
查看>>
JavaScript面向对象名词详解
查看>>
Java设计模式学习 - 责任链模式
查看>>