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


摘自:https://segmentfault.com/a/1190000007894118
使用Swoole加速Laravel(正式环境中)的更多相关文章
- 如何通过swoole加速laravel的问题?
这篇文章主要介绍了关于如何使用swoole加速laravel,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 再来复习一下吧,导致 php 慢的各种因素中解析性语言的特性可以说是罪魁祸首 ...
- LaravelS - 基于Swoole加速Laravel/Lumen
LaravelS LaravelS是一个胶水项目,用于快速集成Swoole到Laravel或Lumen,然后赋予它们更好的性能.更多可能性.Github 特性 内置Http/WebSocket服务器 ...
- 整理SVN代码-->正式环境的代码
最近我被分配到了合并正式补丁代码的工作.聊聊整个流程 第一步解压补丁
- swoole运行模式加速laravel应用的详细介绍
本篇文章给大家带来的内容是关于swoole运行模式加速laravel应用的详细介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 一.Swoole Swoole号称重新定义了PHP, ...
- 在Swoole上加速Laravel应用
Swoole是用于PHP的生产级异步编程框架.它是用纯C语言编写的PHP扩展,它使PHP开发人员可以在PHP中编写高性能,可伸缩的并发TCP,UDP,Unix套接字,HTTP,WebSocket服务, ...
- 使用 Swoole 加速你的 CMS 系统,并实现热更新 (基于 Laravel 框架)
主题:使用 Swoole 加速你的 CMS 系统,并实现热更新 关于 Swoole 的简介不再在此赘述,各位可以自行查看官网的文档进行详细的了解. 本文以 MyCms 为例,简要说明 Swoole 结 ...
- 使用 visualstudio code 编辑器调试执行在 homestead 环境中的 laravel 程序
由于之前做 .net 开发比较熟悉 visualstudio,所以自 visualstudio code 发布后就一直在不同场合使用 vscode ,比如前端.node等等.最近在做 laravel ...
- 用 Visual Studio Code 调试运行在 homestead 环境中的 laravel 程序
由于之前做 .net 开发比较熟悉 visualstudio,所以自 visualstudio code 发布后就一直在不同场合使用 vscode ,比如前端.node等等.最近在做 laravel ...
- Windows10环境中 laravel任务调度 如何启动调度
Windows10环境中 laravel任务调度 如何启动调度 一:问题由来 1:今天在做用laravel开发订单系统的时候,需要使用定时任务来大批量提交订单,测试一下订单金额是否有误.发现larav ...
随机推荐
- MySQL集群---②Windows平台搭建MySQL CLUSTER集群
原文:http://blog.csdn.net/mazhaojuan/article/details/42211857 本文将通过两台电脑来简单介绍一下Windows平台如何搭建MySQL集群. My ...
- VUE的进阶 标签属性数据绑定和拼接
在vue官网把文档扫了一遍后,就开始写网站项目了,没有设计,就百度里找了一个h5的助赢软件的网站把他copy下来,想想有点坏了,接着把内容改改吧.首先开始做一个列表展示vue实例好后,给对象添加默认数 ...
- 150725培训心得(vector)
vector(不定长数组) 在C语言中,数组定义必须给定长度.可是有的时候太浪费空间,能够利用STL中vector函数来解决问题. 1 基本操作 (1)头文件#include<vector> ...
- ios--计时器演示样例:一闪一闪亮晶晶(动画)
本演示样例实现的动画:UIView定时消失随后又闪现,即一闪一闪的动画 所採用的技术:定时器(NSTimer) + 动画(beginAnimations/commitAnimations) 详细实现步 ...
- python核心编程学习记录之多线程编程
- 机器学习入门之四:机器学习的方法--SVM(支持向量机)(转载)
转自 飞鸟各投林 SVM(支持向量机) 支持向量机算法是诞生于统计学习界,同时在机器学习界大放光彩的经典算法. 支持向量机算法从某种意义上来说是逻辑回归算法的强化:通过给予逻辑回归算法更严格的优化条件 ...
- CentOS7环境下SSH端口修改笔记
CentOS7环境下SSH端口修改笔记 说明: CentOS7服务器环境,默认SSH端口为22,考虑到安全方面问题,欲修改端口为62231(机器内网IP为192.168.1.31) ssh配置文件和i ...
- EffectiveJava(13)使类和成员的可访问性最小化
1.为什么要使类和成员可访问性最小化 它可以有效地解除组成系统的各模块之间的耦合关系,使得这些模块可以独立的开发 测试 优化 使用 理解和修改.提高软件的可重用性 2.成员的访问级别 私有(priva ...
- 【Scala-ML】怎样利用Scala构建并行机器学习系统
引言 在学习Scala的过程中,我发现其在构建大规模分布式计算系统上有与生俱来的特质. 其丰富的类型系统能够帮助编程设计提供非常好的信息隐藏和抽象,其monoids和monads概念利用Scala高阶 ...
- Android学习(十三) BroadcastReceiver组件(广播)
一.Broadcast(广播) 是一种广泛应用在应用程序之间传输信息的机制. 二.Broadcast(广播接收器) 是对发送出来的广播进行过滤接收并响应的一类组件,它就是用来接收来自系统和应用中的广播 ...