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

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

1 Laravel的速度瓶颈在哪?

1.1 已有的一些优化方法

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

1

2

3

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类中拿到你要的数据。

1

2

3

4

5

6

7

8

9

$GLOBALS

$_SERVER

$_REQUEST

$_POST

$_GET

$_FILES

$_ENV

$_COOKIE

$_SESSION

 

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

//在你的控制器或者中间件中

  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进程。

1

$ php artisan laravoole restart

 

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

5 愉快的准备测试啦

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

 

 

摘自:https://segmentfault.com/a/1190000007894118

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Laravel Swoole 是一个基于 Swoole 扩展的 PHP 框架,可以扩展 Laravel 应用程序的性能和功能,其包括 WebSocket 的支持。下面是一个简单的 Laravel Swoole WebSocket 链接的例子: 1. 安装 Swoole 首先,需要安装 Swoole 扩展。可以使用以下命令: ```bash pecl install swoole ``` 或在 PHP 源码目录下的 ext 目录找到 swoole 扩展并编译安装。 2. 安装 Laravel Swoole 然后,安装 Laravel Swoole 扩展。可以使用以下命令: ```bash composer require swooletw/laravel-swoole ``` 3. 创建 WebSocket 控制器 创建一个 WebSocket 控制器,例如 App\Http\Controllers\WebSocketController。在控制器,可以实现 onOpen、onMessage、onClose 等方法,这些方法会在 WebSocket 连接打开、收到消息、连接关闭时被调用。 ```php <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Swoole\Http\Request as SwooleRequest; use Swoole\Websocket\Frame; class WebSocketController extends Controller { public function onOpen(SwooleRequest $request) { echo "WebSocket 连接已打开\n"; } public function onMessage(Frame $frame) { $data = $frame->data; echo "接收到消息:$data\n"; $frame->connection->push("你发送的消息是:$data"); } public function onClose($fd) { echo "WebSocket 连接已关闭\n"; } } ``` 4. 配置 WebSocket 服务 在 config/swoole_http.php 配置文件,可以配置 WebSocket 服务的参数。例如: ```php <?php return [ 'port' => env('SWOOLE_PORT', 9501), 'server_options' => [ 'worker_num' => 2, ], 'websocket' => [ 'enable' => true, 'handler' => \App\Http\Controllers\WebSocketController::class, ], ]; ``` 5. 启动 WebSocket 服务 使用以下命令启动 WebSocket 服务: ```bash php artisan swoole:http start ``` 6. 测试 WebSocket 连接 使用 WebSocket 客户端工具(例如 Chrome 插件 Simple WebSocket Client)测试 WebSocket 连接。连接到 ws://localhost:9501,发送消息并查看控制台输出。 以上就是一个简单的 Laravel Swoole WebSocket 链接的例子,希望对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值