swoole运行模式加速laravel应用的详细介绍
本篇文章给大家带来的内容是关于swoole运行模式加速laravel应用的详细介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 ? 一、Swoole Swoole号称重新定义了PHP,它是一个PHP扩展,使得PHP可以使用异步的方式执行,就像node一样,而且还能使用socket,为PHP提供了一系列异步IO、事件驱动、并行数据结构功能。 二、传统web开发模式 ?
? 当请求进入时,web server将请求转交给PHP-FPM,PHP-FPM是一个进程池架构的FastCGI服务,内置PHP解释器。FPM负责解释执行PHP文件生成响应,最终返回给web server,展现至前端。PHP文件中实现了许多业务逻辑,包括Mysql和Nosql的访问,调用第三方应用等等。 每次请求处理的过程都意味着一次PHP文件解析,环境设置等不必要的耗时操作PHP进程处理完即销毁,无法在PHP程序中使用连接池等技术实现性能优化。 三、Swoole运行模式 相比于传统架构,Swoole进程模型最大的特点在于其多线程Reactor模式处理网络请求,使得其能轻松应对大量连接。 除此之外的优点还包括: 全异步非阻塞,占用资源开销小,程序执行效率高 程序运行只解析加载一次PHP文件,避免每次请求的重复加载 进程常驻,使得连接池和请求之间信息传递等的实现成为可能 四、为什么要在 Swoole 上运行 Laravel? 因此如果我们利用 Swoole 内置一个应用级别的 Server, 并且所有脚本文件在加载一次之后便可以保存在内存中呢? 这就是为什么我们需要尝试在 Swoole 上运行 Laravel。 Swoole 可以提供强大性能而 Laravel 则可以提供优雅代码结构使用。这俩儿真是完美组合 ! 五、使用Swoole提升Laravel的性能
本人选择了第一个来测试 composer require swooletw/laravel-swoole ? 如果你使用的是laravel,那么在 config/app.php 的 providers 数组中加上 SwooleTWHttpLaravelServiceProvider::class,
? 如果你使用的是lumen,那么在 bootstrap/app.php 中加入如下代码 $app->register(SwooleTWHttpLumenServiceProvider::class);
? 将配置文件导出到 config 目录下 php artisan vendor:publish --provider="SwooleTWHttpHttpServiceProvider" ? 然后可以去 config/swoole_http.php 中配置信息 'server' => [ 'host' => env('SWOOLE_HTTP_HOST','0.0.0.0'),//监听任意ip 'port' => env('SWOOLE_HTTP_PORT','1215'),'options' => [ 'pid_file' => env('SWOOLE_HTTP_PID_FILE',base_path('storage/logs/swoole_http.pid')),'log_file' => env('SWOOLE_HTTP_LOG_FILE',base_path('storage/logs/swoole_http.log')),'daemonize' => env('SWOOLE_HTTP_DAEMONIZE',1),//1-程序将转入后台作为守护进程运行 ],], ? swoole_http.php 里还提供配置 providers 数组, 'providers' => [ // AppProvidersAuthServiceProvider::class, ] ? 因为使用swoole作为http后,这些providers会被存到内存中,所以这里配置的是每次请求都想要重新注册和重新启动的providers。 现在,你可以执行以下的命令来启动 Swoole HTTP 服务。 $ php artisan swoole:http start ? 然后你可以看到以下信息: Starting swoole http server... Swoole http server started: <http://0.0.0.0:1215> ? 现在可以通过访问?http://127.0.0.1:1215?来进入 Laravel 应用。 六、性能测试 ab -n 1000 -c 10 http://127.0.0.1:1215/ ? 参数说明:-n 1000个请求 -c 10个并发数 ? ? ? ? 图一是使用swoole作为应用服务器,图二是apache服务器 七、使用Nginx代理 swoole在官网也提到过:swoole_http_server对Http协议的支持并不完整,建议仅作为应用服务器。并且在前端增加Nginx作为代理。 1 server { 2 3 listen 80; 4 5 server_name your.domain.com; 6 7 root /path/to/laravel/public; 8 9 index index.php; 10 11 12 13 location = /index.php { 14 15 # Ensure that there is no such file named "not_exists" 16 17 # in your "public" directory. 18 19 try_files /not_exists @swoole; 20 21 } 22 23 24 25 location / { 26 27 try_files $uri $uri/ @swoole; 28 29 } 30 31 32 33 location @swoole { 34 35 set $suffix ""; 36 37 38 39 if ($uri = /index.php) { 40 41 set $suffix "/"; 42 43 } 44 45 46 47 proxy_set_header Host $host; 48 49 proxy_set_header SERVER_PORT $server_port; 50 51 proxy_set_header REMOTE_ADDR $remote_addr; 52 53 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 54 55 56 57 # IF https 58 59 # proxy_set_header HTTPS "on"; 60 61 62 63 proxy_pass http://127.0.0.1:1215$suffix; 64 65 } 66 67 } ? 配置可参考swoole方文档官 Nginx/Apache配置 八、使用swoole和传统php开发的缺点 以上就是swoole运行模式加速laravel应用的详细介绍的详细内容 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |