博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用Swoole加速Laravel(正式环境中)
阅读量:6508 次
发布时间:2019-06-24

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

1 Laravel的速度瓶颈在哪?

1.1 已有的一些优化方法

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

php artisan optimizephp artisan config:cachephp 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的轮子,找了三个轮子

用了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 因为我要开发微信相关的,所以使用了这个包,但是这个包的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

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

你可能感兴趣的文章
python二维数组输出下三角_python,将三角函数绘制成二维数组
查看>>
python数据分析与人工智能_Python数据分析:seaborn
查看>>
echarts折线图不显示y轴值_Echarts 折线图y轴标签值太长时显示不全的解决办法
查看>>
改变elementui卡片crad样式_修改ElementUI样式的几种方式
查看>>
齐博php百度编辑器上传图片_为百度UE编辑器上传图片添加水印功能
查看>>
英尺英寸和厘米的换算_C语言中关于英尺、英寸、厘米的换算
查看>>
el-button怎么竖起来_“记得告诉我”英语怎么说?
查看>>
latex 中括号_LaTeX中级教程:定义新命令
查看>>
minist数据集_人工智能与机器学习Pytorch手写数字识别-MINIST数据集识别篇
查看>>
mysql oracle as_ORACLE WITH AS 用法
查看>>
mysql操作java源码_java mysql 增删改查操作
查看>>
shell执行mysql文件_shell执行mysql命令
查看>>
mysql 经纬度 类型_在MySQL数据库中存储纬度/经度时,理想的数据类型是什么?...
查看>>
linux kill mysql_服务器内存不足导致LINUX KILL MYSQLD 故障
查看>>
为什么mysql创建不_求教,,为什么创建不了表
查看>>
phpmyadmin mysql字符集_搞定MySQL与phpMyAdmin数据库的字符串乱码问题
查看>>
mysql5.5.38编译安装_mysql5.5编译安装过程(自己总结)
查看>>
mysql proxy 主从_mysql主从单向同步+mysql-proxy数据库读写分离
查看>>
mysql数据库多种优化方案_MySQL数据库多种优化方案
查看>>
wps填写表格提交汇总_3分钟群收100份文件,还能汇总在1张表格!这是什么神仙操作?...
查看>>