lumen5.5框架使用swooletw/laravel-swoole扩展包

介绍:

swooletw/laravel-swoole:

swoole在laravel/lumen框架的封装

github:https://github.com/swooletw/laravel-swoole?utm_source=gold_browser_extension


swoole:    

PHP的异步、并行、高性能网络通信引擎,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步Redis,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询。 Swoole内置了Http/WebSocket服务器端/客户端、Http2.0服务器端。

官网:https://www.swoole.com/


安装步骤:

1.安装swoole扩展

2.安装swooletw/laravel-swoole   composer require swooletw/laravel-swoole

3.配置

    复制扩展包下的swoole_http.php和swoole_websocket.php到项目根目录的config下

    在bootstrap/app.php中,添加:

    $app->register(\SwooleTW\Http\LumenServiceProvider::class);
    $app->configure('swoole_http');
    $app->configure('swoole_websocket');

4.命令行命令

php artisan swoole:http start //开启http服务
php artisan swoole:http stop  //停止
php artisan swoole:http restart  //重新启动
php artisan swoole:http reload  //重新加载,每次改完代码都需运行此命令
php artisan swoole:http infos  //运行信息

与nginx with fpm对比:

swoole server

ab -c 100 -n 100 http://127.0.0.1:1215/

lumen5.5框架使用swooletw/laravel-swoole扩展包_第1张图片

nginx with fpm

ab -c 100 -n 100 http://jmd-service.com/

lumen5.5框架使用swooletw/laravel-swoole扩展包_第2张图片


swooletw/laravel-swoole的http运行流程:

1.通过lumen服务注册者注册:\SwooleTW\Http\LumenServiceProvider

2.通过ioc容器创建单一(singleton)实例:swoole.http(\SwooleTW\Http\Server\Manager::class)

lumen5.5框架使用swooletw/laravel-swoole扩展包_第3张图片

3.环境检测,读取配置文件,初始化操作

lumen5.5框架使用swooletw/laravel-swoole扩展包_第4张图片

4.注册swoole server事件,事件回调文档:https://wiki.swoole.com/wiki/page/41.html

    1)onStart事件,记录pid(后面重启,重新加载,停止需要用到)

    2)onWorkStart事件,每个work或task进程首次创建时运行,此处加载了lumen框架运行文件,沙箱环境,进程通信共享内存表等等

    3) onRequest事件,每个用户发送http请求都会在这里真正处理

    4) onShutdown事件 停止事件,删除记录pid的文件

    ....更多事件请查看文档,在laravel-swoole的http服务中只用到这几个事件


沙箱环境

由于 swooletw/laravel-swoole的http是常驻内存的,在lumen第一次加载框架核心文件的时候Request,Rsponse等对象ioc实例就已经被创建了,所以需要每次请求的时候都要重置一下,扩展包中Sandbox就是负责处理这些的,如果有需要要重新初始化的ioc容器,只需在swoole_http中的instance加入就可以了


开发注意

对static静态变量导致内存泄露解决思路

    在每个请求开始的时候都有事件发送,可以监听这些事件,清理static静态变量

    设置swoole_http中server.options.max_request最大请求数,到达该请求数会重启work

....待补充

如果写的问题,欢迎指出,谢谢


你可能感兴趣的:(杂项)