资讯专栏INFORMATION COLUMN

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

vibiu / 683人阅读

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

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://www.ucloud.cn/yun/22222.html

相关文章

  • 了解swoole运行模式,加速laravel应用

    摘要:负责解释执行文件生成响应,最终返回给,展现至前端。相比于传统架构,进程模型最大的特点在于其多线程模式处理网络请求,使得其能轻松应对大量连接。这要求开发人员对于多进程的运行模式有更清晰的认识更容易内存泄露。 一、SwooleSwoole号称重新定义了PHP,它是一个PHP扩展,使得PHP可以使用异步的方式执行,就像node一样,而且还能使用socket,为PHP提供了一系列异步IO、事件...

    时飞 评论0 收藏0
  • 使用 Swoole 加速 Laravel

    摘要:因为为单个请求创建的环境将在请求过程完成后立即销毁。可以成为强大的性能增强器,提供了优雅的结构和代码使用方式。你可以使用此命令快速安装它,并访问官方网站获取更多信息。注意目前仅支持和。服务器不能使用。基准测试使用进行干净的测试。 Swoole 是针对PHP的生产级异步编程框架。它是一种用纯C语言编写的PHP扩展,它使PHP开发人员能够在PHP中编写高性能,可扩展的并发TCP,UDP,U...

    didikee 评论0 收藏0
  • 使用 Swoole加速你的 Laravel 应用

    摘要:是为开发的生产级异步编程框架。因为单个请求创建的环境在请求执行结束后会立即销毁。可以提供强大性能而则可以提供优雅代码结构使用。在使用这个包之前,请确保你的机器安装了正确的。建立并运行起来现在,你可以执行以下的命令来启动服务。 showImg(https://segmentfault.com/img/bVbaF89?w=1240&h=634); Swoole 是为 PHP 开发的生产级异...

    snifes 评论0 收藏0
  • PHP相关

    摘要:的机器学习库的机器学习库,包括算法交叉验证神经网络等内容。在即将到来的大会上,她将和大家分享在机器学习领域的全新可能。入门总结入门相关,如安装配置基本使用等。 基于 Swoole 开发 PHP 扩展 Swoole-1.9.7 增加了一个新特性,可以基于 Swoole 使用 C++ 语言开发扩展模块,在扩展模块中可以注册 PHP 内置函数和类。现在可以基于 Swoole 来编写 PHP ...

    lewinlee 评论0 收藏0
  • 使用swoole改造laravel应用

    摘要:使用改造应用标签空格分隔概述介绍是为开发的生产级异步编程框架。然后你可以看到以下信息现在可以通过访问来进入应用。 使用swoole改造laravel应用 标签(空格分隔): php 1. 概述 1.1 swoole介绍 Swoole 是为 PHP 开发的生产级异步编程框架。 他是一个纯 C 开发的扩展, 他允许 PHP 开发者在 PHP 中写 高性能,可扩展的并发 TCP, UDP,...

    cpupro 评论0 收藏0

发表评论

0条评论

vibiu

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<