Laravel开发实践我用 LinuxPHP经验分享

laravel-swoole在linux下的安装与配置,以及与o

2020-03-17  本文已影响0人  众神开挂

在传统的 PHP 生命周期中,像 Laravel 这样的框架, 浪费了大量的时间去创建和销毁资源
因此如果我们利用 Swoole 内置一个应用级别的 Server, 并且所有脚本文件在加载一次之后便可以保存在内存中。
Jemeter并发测试相比较opcache插件能提升3-5倍,比较原生php7的话可以提升5-10倍,文末贴出测试报告。
涉及到Mysql查询的话性能提升确实有限(双核4G配置2M带宽并发量在1000左右),非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,可以愉快的访问了
测试报告(垃圾服务器+小水管,大佬勿喷)

微信图片编辑_20200321125114_看图王.jpg
注意事项:

禁用函数
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

上一篇下一篇

猜你喜欢

热点阅读