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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 原文链接 必备品 文档:Documentation API:API Reference 视频:Laracasts ...
    layjoy阅读 8,630评论 0 121
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,026评论 19 139
  • 背景## 正在做一个智能家居的项目,接收下位机(就是控制智能家居硬件模块的HUB)协议解析,Web端维护硬件状态,...
    万年场保安阅读 44,168评论 16 101
  • 先说几句废话,调和气氛。事情的起由来自客户需求频繁变更,伟大的师傅决定横刀立马的改革使用新的框架(created ...
    wsdadan阅读 3,102评论 0 12
  • 一语倾诉:文晓 刺死辱母者这件事情,应该很多人都知道了。 大概事情经过就是,一群高利贷,以索债之名,对一名母亲(苏...
    一语倾诉阅读 163评论 0 1