微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

swoole加速laravel框架,laravels

1. swoole是什么?如何安装?

1.1 swoole是什么

Swoole 是一个使用 C++ 语言编写的基于异步事件驱动和协程的并行网络通信引擎,为 PHP 提供协程、高性能网络编程支持。提供了多种通信协议的网络服务器和客户端模块,可以方便快速的实现 TCP/UDP服务、高性能Web、WebSocket服务、物联网、实时通讯、游戏、微服务等,使 PHP 不再局限于传统的 Web 领域。

swoole的优势

  • 常驻内存,避免重复加载带来的性能损耗,提升海量性能

  • 协程异步,提高对 I/O 密集型场景并发处理能力(如:微信开发、支付、登录等)

  • 方便地开发 Http、WebSocket、TCP、UDP 等应用,可以与硬件通信

1.获取swoole安装包,地址:https://pecl.php.net/package/swoole

2. 解压swoole安装包 tar –zxvf swoole-4.6.6.tar 3. 将解压出来的安装包copy到PHP容器 docker cp /home/swoole PHP:/usr/src/PHP/ext/swoole 4. 安装swoole docker-PHP-ext-install swoole 5. 完成安装后,查看swoole信息 PHP --ri swoole

2. swoole初步体验

<?PHP
$http = new swoole\Http\Server('0.0.0.0',9501);

$http->on('Request',function ($request,$response) {
   $response->header('Content-Type','text/html; charset=utf-8');
   $response->end('<h1>Hello Swoole. #' . rand(1000,9999) . '</h1>');
});

$http->start();
?>

代码解释:
实例化一个swoole的http服务类,并传递监听的端口以及host,HTTP 服务器只需要关注请求响应即可,所以只需要监听一个 onRequest 事件。当有新的 HTTP 请求进入就会触发此事件。事件回调函数有 2 个参数,一个是 $request 对象,包含了请求的相关信息,如 GET/POST 请求的数据。
另外一个是 response 对象,对 request 的响应可以通过操作 response 对象来完成。$response->end() 方法表示输出一段 HTML 内容,并结束此请求

0.0.0.0 表示监听所有 IP 地址,一台服务器可能同时有多个 IP,如 127.0.0.1 本地回环 IP、192.168.1.100 局域网 IP、210.127.20.2 外网 IP,这里也可以单独指定监听一个 IP
9501 监听的端口,如果被占用程序会抛出致命错误,中断执行。

3. PHP运行的运行模式

那么怎么解决这个问题呢?

FastCGI,全称 Fast Common Gateway Interface,中文译作“快速公共网管接口”。没错,这又是个协议。当然,这个协议并不是因为 PHP 才有的。

对于 PHP 来说,httpd 是通过自身来实现一个 FastCGI 的模块的。它会预先加载好 PHP.ini 文件中的配置。待到有请求进入需要 PHP 处理时,PHP 就不需要再对 PHP.ini 重新加载了。这也就是每改动过 PHP.ini 后都要重启 httpd 服务的原因。

PHP-fpm 也是 FastCGI 的一种实现。通常我们是将 NginxPHP 处理部分代理到 PHP-fpm 的端口上,交给 PHP-fpm 来处理。而 PHP-fpm 同样是通过预先加载配置,然后给到子进程的方式的,它会对进程做一些管理。

http-Server服务,这是服务可以用于web项目开发中、也可以用于对laravel,thinkPHP等框架进行加速; 如果想利用swoole加速框架、框架的条件必须是ioc类型因为swoole是常驻内存。

我们用的 PHP 主要用于 web 开发,通过 Nginx、apache 等服务端程序调用 PHP-fpm 处理服务端的业务逻辑,处理完后 PHP 撤消内存并返回结果。一个 web 请求就要加载一次 PHP 的全部文件,需要的系统资源开销很大,这是目前 PHP-fpm 的缺点之一;并且因为 PHP-fpm 在一次请求结束就释放内存,无法做连接池,也不合适 service 端的开发。

优点:

缺点:

swoole是如何解决PHP-fpm遇到的问题的?

swoole是完全的长驻内存的,长驻内存一个最大的好处就是可以性能加速。在fpm模式下,我们处理一个请求,通常会有一些空消耗,比如框架共用文件加载,配置文件加载,那么在swoole中,可以在onworkerstart的时候提前一次性把一些必要的文件和配置加载好,不必每次receive重复加载一遍,这样能提升不小的性能

5. laravel使用swoole的组件

composer require hhxsv5/laravel-s

该扩展包具备自动发现功能(Laravel 5.5 以上版本可用),无需手动在 config/app.PHP 配置文件注册,安装完成后,运行如下 Artisan 命令相应脚本和配置文件发布到根目录下:

你可以在配置文件中对 Swoole 进行一些基本配置,而脚本文件主要用于管理 Swoole 服务的启动、重载、关闭等操作。

也可以在.env 修改工作进程数并重启服务

启动 LaravelS

此外 PHP bin/laravels 还支持其它命令对 LaravelS 进行管理:

stop @H_530_404@restartreload @H_530_404@infohelp
命令 说明
start 启动laravelS,展示已启动的进程列表 "ps -ef / grep laravelS" 支持选项 "-d /--daemonize" 以守护进程的方式运行,此选项将覆盖laravels.PHP中swoole.daemonize设置;支持选项 "-e /--env" 用来指定运行的环境,如 --env=testing将会优先使用配置.env.testing,这个特性要求laravel5.2+
停止laravelS
停止laravelS,支持选项 “-d / --daemonize ”和 “-e / --env”
平滑重启索引Task/Worker,这些进程包含了你的业务代码,不会重启Master/manger/Timer/Custom进程
显示组件的版本信息
显示帮助信息

如果是在生产环境使用,推荐使用 Supervisor 对 LaravelS 服务进行管理,从而提供服务的稳定性,相应的配置示例如下:

6.Nginx反向代理swoole使用

反向代理和正向代理的区别就是:正向代理代理客户端,反向代理代理服务器。

Nginx.conf配置

ab压测(可以在准备一份Nginx环境的代码进行对比)




版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐