本篇文章给大家带来的内容是关于swoole运行模式加速laravel应用的详细介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

我的官方群点击此处。

一、Swoole

Swoole号称重新定义了PHP,它是一个PHP扩展,使得PHP可以使用异步的方式执行,就像node一样,而且还能使用socket,为PHP提供了一系列异步IO、事件驱动、并行数据结构功能。 Swoole4支持完整的协程编程模式,可以使用完全同步的代码实现异步程序。PHP代码无需额外增加任何关键词,底层自动进行协程调度,实现异步IO 。 nodejs能实现的swoole几乎都能实现,而且性能比nodejs更高,毕竟nodejs是单线程的无法充分发挥cpu性能,swoole是多线程的可以充分发挥cpu的性能。 Swoole高效跟传统的web开发有什么区别,除了传统的LAMP/LNMP同步开发模式,swoole的异步开发模式是怎样的,如何保持高效?

二、传统web开发模式 PHP web开发采用的方式是LAMP/LNMP架构,即Linux、Nginx,Mysql和PHP。这里以nginx来举例,大致结构为:

当请求进入时,web server将请求转交给PHP-FPM,PHP-FPM是一个进程池架构的FastCGI服务,内置PHP解释器。FPM负责解释执行PHP文件生成响应,最终返回给web server,展现至前端。PHP文件中实现了许多业务逻辑,包括Mysql和Nosql的访问,调用第三方应用等等。 这样的结构php-fpm和nginx的配合已经运行得足够好,但是由于php-fpm本身是同步阻塞进程模型,在请求结束后释放所有的资源(包括框架初始化创建的一系列对象),导致PHP进程“空转”(创建<-->销毁<-->创建)消耗大量的CPU资源,从而导致单机的吞吐能力有限。

每次请求处理的过程都意味着一次PHP文件解析,环境设置等不必要的耗时操作PHP进程处理完即销毁,无法在PHP程序中使用连接池等技术实现性能优化。

三、Swoole运行模式 针对传统架构的问题,swoole从PHP扩展出发,解决了上述问题,对于swoole的进程模型,我们已经了解过了。

程序猿的生活:【社群福利】30G-PHP进阶资料,助力大家都能30K​zhuanlan.zhihu.com

相比于传统架构,Swoole进程模型最大的特点在于其多线程Reactor模式处理网络请求,使得其能轻松应对大量连接。

除此之外的优点还包括:

全异步非阻塞,占用资源开销小,程序执行效率高

程序运行只解析加载一次PHP文件,避免每次请求的重复加载

进程常驻,使得连接池和请求之间信息传递等的实现成为可能

四、为什么要在 Swoole 上运行 Laravel? Laravel框架启动的时候需要加载很多文件,再加上其出了名的生态环境好,所以在开发过程中我们就会发现有非常多的已经造好的轮子,这也就使得Laravel的一次启动的磁盘IO特别高(就是要加载很多文件嘛) laravel生命周期需要在每次请求的时候都执行一遍。因为单个请求创建的环境在请求执行结束后会立即销毁。 换句话说, 在传统的 PHP 生命周期中, 为了脚本执行而浪费了大量的时间去创建和销毁资源。想象一下像 Laravel 这样的框架, 在每次请求中需要加载多少文件? 同时也浪费了大量的 I/O 操作。

因此如果我们利用 Swoole 内置一个应用级别的 Server, 并且所有脚本文件在加载一次之后便可以保存在内存中呢? 这就是为什么我们需要尝试在 Swoole 上运行 Laravel。 Swoole 可以提供强大性能而 Laravel 则可以提供优雅代码结构使用。这俩儿真是完美组合 !

五、使用Swoole提升Laravel的性能 在现有的轮子中,感觉下面这两个还是非常不错的,可以自行选择

  • swooletw/laravel-swoole
  • garveen/laravoole

本人选择了第一个来测试 使用composer安装:

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 应用。 注意:该拓展是不支持热启动的,所以每次有代码更新都要重启服务 php artisan swoole:http restart

六、性能测试 使用Apache的ab测试工具

ab -n 1000 -c 10 http://127.0.0.1:1215/

参数说明:-n 1000个请求 -c 10个并发数

图一是使用swoole作为应用服务器,图二是apache服务器 测试环境在虚拟机中,电脑配置也较差,性能没有完全发挥出来,可以看到apache只完成197次请求就扛不住压力了,swoole HTTP服务 完成了压测,性功完全碾压apache服务器。

七、使用Nginx代理

swoole在官网也提到过:swoole_http_server对Http协议的支持并不完整,建议仅作为应用服务器。并且在前端增加Nginx作为代理。 那么,我们就增加需要配置nginx.conf里的server:

server {listen 80;server_name your.domain.com;root /path/to/laravel/public;index index.php;location = /index.php {# Ensure that there is no such file named "not_exists"# in your "public" directory.try_files /not_exists @swoole;}location / {try_files $uri $uri/ @swoole;}location @swoole {set $suffix "";if ($uri = /index.php) {set $suffix "/";}proxy_set_header Host $host;proxy_set_header SERVER_PORT $server_port;proxy_set_header REMOTE_ADDR $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# IF https# proxy_set_header HTTPS "on";proxy_pass http://127.0.0.1:1215$suffix;}}

配置可参考swoole方文档官 Nginx/Apache配置 至此,大功告成,你可以像平常一样访问你的网站了。

八、使用swoole和传统php开发的缺点 本文主要介绍了使用swoole作为laravel的应服务器,最后说下使用swoole和传统php开发的缺点。 1、更难上手。这要求开发人员对于多进程的运行模式有更清晰的认识 2、更容易内存泄露。在处理全局变量,静态变量的时候一定要小心,这种不会被GC清理的变量会存在整个生命周期中,如果没有正确的处理,很容易消耗完所有的内存。在php-fpm下,php代码执行完内存就会被完全释放。

以上就是swoole运行模式加速laravel应用的详细介绍的详细内容

以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要的可以加入我的官方群点击此处。

laravel log 对象_swoole运行模式加速laravel应用的详细介绍(life)相关推荐

  1. apache支持laravel路由_swoole运行模式加速laravel应用的详细介绍

    本篇文章给大家带来的内容是关于swoole运行模式加速laravel应用的详细介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 我的官方群点击此处. 一.Swoole Swoole ...

  2. 华为战略规划落地的核心:VDBD(价值驱动业务设计模型) 盈利模式(利润模型)详细介绍

    华为战略规划落地的核心:VDBD(价值驱动业务设计模型) & 盈利模式(利润模型)详细介绍 本文作者 | 谢宁,<华为战略管理法:DSTE实战体系>.<智慧研发管理>作 ...

  3. 征战希洛克集卡活动显示服务器没角色,dnf希洛克征战模式门槛及入场规则详细介绍...

    dnf希洛克征战模式门槛及入场规则详细介绍.不少玩家还不是很清楚希洛克征战模式门槛有多高,本期就随小编一起了解一下吧,希望对于各位朋友来说有所帮助. 希洛克的征战模式和洞察之眼副本相似,可以理解为类似 ...

  4. 启动efi_efi启动模式对比bios启动模式有哪些优势【详细介绍】

    uefi是一种由efi1.10为基础所发展起来的启动模式,以前u盘引导都是针对bios的,如今加入了uefi这种操作系统自动与启动的操作环境的主板已是很普遍,接下来我们就来了解下关于 uefi 启动模 ...

  5. 路由器AP、路由、桥接模式有什么区别【详细介绍】

    现在的路由大多数已经开始支持多种网络连接模式,那么我们就挑一款模式最全的路由来了解各种模式的区别吧!下文将以TP-Link迷你无线路由器为例.在TP-Link迷你无线路由器上一般有AP(接入点)模式. ...

  6. ios沙箱模式开启_iOS沙盒详细介绍

    沙盒机制介绍 iOS中的沙盒机制是一种安全体系.为了保证系统安全,iOS每个应用程序在安装时,会创建属于自己的沙盒文件(存储空间).应用程序只能访问自身的沙盒文件,不能访问其他应用程序的沙盒文件,当应 ...

  7. 查看此docker网络连接模式_Docker 网络模式(四种)详细介绍

    Docker 网络模式 本文首先介绍了Docker自身的4种网络工作方式, Docker作为目前最火的轻量级容器技术,有很多令人称道的功能,如Docker的镜像管理.然而,Docker同样有着很多不完 ...

  8. Hadoop环境搭建之本地运行模式

    一.hadoop本地运行模式介绍 默认的模式,无需运行任何守护进程,所有程序都在单个JVM上执行.由于在本机模式下测试和调试MapReduce程序较为方便,因此,这种模式适宜用在开发阶段. 使用本地文 ...

  9. swoole加速laravel框架

    swoole加速laravel框架 一.swoole 介绍安装 docker安装php扩展 二.php运行的运行模式 1. cgi模式 2. fastcgi模式 三.swoole加速laravel的原 ...

最新文章

  1. 抓取网页的脚本 【修复】
  2. 串口上升时间标准_JESD204B 串行接口时钟需要及其实现
  3. 从源码带你看懂functools的partial方法
  4. Emacs中使用Forms-mode以表格形式展示/编辑简单的文本数据
  5. C语言 数据结构 栈(用链表实现)
  6. annotation - SuppressWarning
  7. 推荐一简单易用的脑图制作工具
  8. java当前时间推前三个月_获取当前时间的前三个月 java
  9. java把对象转成图片格式转换器安卓版,java 万能图片格式转换
  10. mysql-5.7.24 linux下载_Linux下安装mysql-5.7.24
  11. leetcode 移动零
  12. 嵌入式ctags跳转和全局打印日志
  13. ACL2021 Findings | 挖掘label的语义来增强few-shot问题
  14. apache端口一直在增加_PHP环境全套针细教程:Windows安装Apache, PHP and MYSQL
  15. 远程调试云端php,Vim XDebug调试PHP php远程调试
  16. 容器技术Docker K8s 34 容器服务ACK基础与进阶-安全管理
  17. 如何写好科研论文2021秋期末考答案|研究生网课期末考答案|学堂在线|清华大学高飞飞
  18. 计算机硬盘图标怎么更改,硬盘图标变了怎么办?WinXP电脑硬盘图标变了怎么改回来?...
  19. 51.php-fpm的pool 慢日志 open_basedir 进程管理
  20. 伽卡他卡学生端使用问题

热门文章

  1. 钉钉老版本下载3.31_钉钉3.3.1老版本官方下载-钉钉3.3.1旧版本PC版官方版-东坡下载...
  2. netcore docker_让.NetCore程序跑在任何有docker的地方
  3. fluent瞬态计算终止条件在哪里设置_Fluent案例7【圆柱绕流】
  4. PHP ajax 传递中文乱码,ajax+php传递中文乱码解决办法
  5. activiti页面展示流程图乱码_activiti 5.17 流程图中文乱码问题
  6. python进程的回收—wait
  7. php 数据接口,初识 php 接口
  8. xshell 打开文件跳转到最后_如何在Xshell中打开Xftp
  9. 谈谈工业界落地能力最强的机器学习算法
  10. centos6.5安装配置zabbix3.0.3