当前位置: 首页 > news >正文

使用Swoole加速Laravel(正式环境中)

1 Laravel的速度瓶颈在哪?

1.1 已有的一些优化方法

1.1.1 laravel官方提供了一些优化laravel的优化方法

php artisan optimize
php artisan config:cache
php artisan route:cache

1.1.2 使用opcache加速,PHP是个解释型语言执行的时候先得把程序读进来,由Zend引擎编译成opcode。最后Zend虚拟机顺次执行这些opcode完成操作。opcache起到的作用就是缓存opcode,从而减少编译的时间,减少CPU密集。


1.1.3 使用PHP7.1,不要问我为什么

1.2 磁盘IO上的瓶颈

Laravel本身启动需要的文件就很多,外加其出了名的生态环境好,开发中我们会很多很多现有的轮子,使得一次启动的磁盘IO特别高(就是要加载很多文件嘛),虽然官方的php artisan optimize方法优化了文件的加载,但并没有实际解决IO上的问题。
知道了问题那就很容易解决了,只要不要每次启动都重新加载就好了,下面轮到Swoole上场啦。


2 Swoole

Swoole是一个PHP扩展,使得PHP使用异步的方式执行,就像node一样,而且还能使用socket,为PHP提供了一系列异步IO、事件驱动、并行数据结构功能。具体的安装方法这就不说了,自己谷歌吧。


3 现有的轮子

搜搜github上已有的swoole启动laravel的轮子,找了三个轮子

scil/LaravelFly
chongyi/swoole-laravel-framework
garveen/laravoole

用了LaravelFly,听名字感觉感觉挺酷,结果不如人意,实在不喜欢它那种强硬的启动方式。跟Laravel的风格-'优雅' 很不搭。于是又想自己写,结果写到一半发现laravoole这个项目有更新,然后启动方式(使用artisan命令,没更新前是用的bash脚本启动),代码风格都很酷,这不就是我想做的东西嘛!


chongyi/swoole-laravel-framework这个轮子是我在写轮子的时候,作者在微信群里分享的,有兴趣的朋友可以试试,我还没试过。


4 LARAVOOLE中的几个注意点

可以看看作者的文档,我就只总结下我在用的过程中遇到的几个点
1 你应该不再使用以下的超全局变量,因为它们是WEB服务器创建的,而一个非热启动的项目使用他们可能会造成变量污染,你可以从Laravel的Request类中拿到你要的数据。

$GLOBALS
$_SERVER
$_REQUEST
$_POST
$_GET
$_FILES
$_ENV
$_COOKIE
$_SESSION

2 因为我要开发微信相关的,所以使用了EASYWECHAT这个包,但是这个包的oauth方法使用的是原生的SESSION,所以这边也要改成redis等其它方式去存储session。具体代码如下。

 //在你的控制器或者中间件中
  public function handle(Request $request, Closure $next)
  //省略代码
  $redirect = config('app.url') . $request->getRequestUri();//这个地址要求带着token
                
  $options = [
                'app_id' => config('app.appid'),
                'secret' => config('app.secret'),
                'oauth' => [
                    'scopes' => ['snsapi_userinfo'],
                    'callback' => $redirect,
                ],
             ];

   $app = new Application($options);
   //使用laravel session替代原生session
   $app->oauth->setRequest($request);
   //省略下面代码
  }

3 不支持热启动了,所以每次更新代码后都需要重新启动Laravoole进程。

$ php artisan laravoole restart

如需要支持热启动,请自行谷歌 swoole + inotify,大概原理就是用inotify监控文件变更,如果更新了重启swoole,如果正式环境中还可以自己写个部署脚本,git pull后重启服务等,方法很多不一一列举。

5 愉快的准备测试啦

测试机子:
阿里云
centos6.5
双核
4G
无视带宽影响,向本机请求,测试结果如下,测了几次,平均在700RPS左右。原先的只有20多RPS。

clipboard.png

clipboard.png

相关文章:

  • Java中主要Map类概述
  • Scoped CSS规范草案
  • apk增量升级
  • win7下JDK环境变量设置方法
  • Python学习基础
  • java并行计算Fork和Join的使用
  • bootstrap html页面禁止放大缩小
  • dot函数
  • Java图片合成
  • Ubuntu安装Eclipse
  • 接口初探
  • 设计模式总结篇系列:原型模式(Prototype)
  • oracle开启/关闭archlog
  • java虚拟机所管理的内存包括的运行时数据区域
  • Chrome浏览器查看cookie
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • CODING 缺陷管理功能正式开始公测
  • GitUp, 你不可错过的秀外慧中的git工具
  • Node + FFmpeg 实现Canvas动画导出视频
  • SpiderData 2019年2月13日 DApp数据排行榜
  • SpiderData 2019年2月25日 DApp数据排行榜
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 理清楚Vue的结构
  • 网络应用优化——时延与带宽
  • 小程序开发之路(一)
  • ​2020 年大前端技术趋势解读
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • # include “ “ 和 # include < >两者的区别
  • # Java NIO(一)FileChannel
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • #控制台大学课堂点名问题_课堂随机点名
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (8)STL算法之替换
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (LeetCode 49)Anagrams
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (七)Java对象在Hibernate持久化层的状态
  • (十六)串口UART
  • (算法二)滑动窗口
  • (一)SpringBoot3---尚硅谷总结
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .aanva
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .net/c# memcached 获取所有缓存键(keys)
  • .NET成年了,然后呢?
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • ??如何把JavaScript脚本中的参数传到java代码段中
  • @Autowired 与@Resource的区别
  • @ModelAttribute注解使用
  • @Transient注解
  • @我的前任是个极品 微博分析