laravel-swoole在linux下的安装与配置,以及与opcache的性能比较

https://www.jianshu.com/p/2be3d1168b0b

在传统的 PHP 生命周期中,像 Laravel 这样的框架, 浪费了大量的时间去创建和销毁资源
因此如果我们利用 Swoole 内置一个应用级别的 Server, 并且所有脚本文件在加载一次之后便可以保存在内存中。
Jemeter并发测试相比较opcache插件能提升3-5倍,比较原生php7的话可以提升5-10倍,文末贴出测试报告。
涉及到Mysql查询的话性能提升确实有限(双核4G配置2M带宽并发量在1000-2000左右,复杂查询的话甚至达不到150),非mysql查询,例如生成图形验证码,有大幅度的性能提升(上述配置可以并发量2400+)

1、安装swooletw/laravel-swoole

需要在Linux服务器下安装swoole扩展,宝塔面板的操作比较简单

image.png

cd到laravel程序根目录下
使用 Composer 安装laravel-swoole:

 

$ composer require swooletw/laravel-swoole

本人项目中使用的是laravel 5.8,可以跳过providers的配置,
运行以下命令,生成配置文件swoole_http.php和swoole_websocket.php

 

$ php artisan vendor:publish --tag=laravel-swoole

修改swoole_http.php配置文件(仅供参考)

 

'server' => [
……
        'host' => env('SWOOLE_HTTP_HOST', '0.0.0.0'),
        'port' => env('SWOOLE_HTTP_PORT', '9200'),
……
       'reactor_num' => env('SWOOLE_HTTP_REACTOR_NUM', 2*swoole_cpu_num()),
       'worker_num' => env('SWOOLE_HTTP_WORKER_NUM', 2*swoole_cpu_num()),
       'task_worker_num' => env('SWOOLE_HTTP_TASK_WORKER_NUM', 2*swoole_cpu_num()),
]

可以试着运行下列命令

 

php artisan swoole:http start

看到以下信息表示运行成功

 

Starting swoole http server...
Swoole http server started: <http://0.0.0.0:9200>

2、配置守护进程(Supervisor)

运行目录是laravel的根目录
启动文件填写php程序

 

image.png

3、配置站点和反向代理

3.1、添加站点

填写域名和根目录,php版本处设置为纯静态

 

添加站点

3.2、配置反向代理

点击添加反向代理按钮

 

添加反向代理01

 

填写目标URL为 http://0.0.0.0:9200,发送域名 $host

 

添加反向代理02


配置反向代理的跨域,修改配置文件

image.png

 

image.png

添加的文件内容如下

 

 add_header "Access-Control-Allow-Origin" "*"; #设置允许跨域
 add_header "Access-Control-Allow-Methods" "GET, POST, OPTIONS"; #设置允许通过跨域方法
 add_header "Access-Control-Allow-Headers" "Origin, X-Requested-With, Content-Type, Accept,x-access-token"; #设置允许跨域的header

重启一下Nginx,可以愉快的访问了
测试报告(垃圾服务器+小水管,大佬勿喷)

压力测试报告

 

注意事项:

禁用函数
exit/die 相关
由于 Swoole 中禁用 exit/die 函数,所以在 Laravel 中也不能使用它们,以及与之相关的 dd 函数。
请求相关
不要使>用 $_GET/$_POST/$_FILES/$_COOKIE/$_REQUEST/$_SESSION/$GLOBALS/$_ENV 之类的超全局变量,统一通过 Illuminate\Http\Request 对象获取请求数据。
另外,Swoole 限制 GET 请求头长度不能超过 2KB,POST 请求数据长度也会通过 package_max_length 配置进行限制,默认是 2M。
响应相关
统一通过 Illuminate\Http\Response 返回响应,不要使用 header()/setcookie()/http_response_code() 之类的函数,以免引起异常问题。
flush 相关
swoole_http_response 不支持 flush 函数,所以不要使用与之相关的 flush/ob_flush/ob_end_flush/ob_implicit_flush 等函数。

参考文章

使用 Swoole 来加速你的 Laravel 应用 | PHP 技术论坛 https://learnku.com/php/t/10939/use-swoole-to-speed-up-your-laravel-application
Swoole 驱动的 Laravel 应用优化原理及注意事项 | 学院君(原Laravel学院) https://xueyuanjun.com/post/19832.html



作者:众神开挂
链接:https://www.jianshu.com/p/2be3d1168b0b
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值