详解基于Laravel8下的LaravelS实现高性能HTTP服务器
准备工作
虚拟生命:vm16
环境:LNMP
系统版本:CentoOS8.2
框架:Laravel8
我使用的测试环境大多数是基于最新版本,目的是用于测试学习。既然推出了最新的版本,不管你接不接受或愿不愿意使用,它都是一个趋势。因此,基于学习的目的,使用新版本。
关于环境的搭建不再重复了,博客里面写了源码安装搭建PHP环境。
什么是LaravelS
LaravelS 是一个胶水项目,用于快速集成 Swoole 到 Laravel 或 Lumen,然后赋予它们更好的性能、更多可能性。
创建Laravel8项目
第一步:安装Laravel8
<span style="color: rgb(255, 255, 255);">composer create-project --prefer-dist laravel/laravel laravel_swoole</span><br></br>
第二步:配置Laravel8虚拟主机
<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">cd</span> /usr/local/nginx/conf/vhosts/</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 注意:这个虚拟主机机配置Laravel8项目</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">vim</span> laswoole.conf</span>
注意:我这里是vhosts目录下。在nginx.conf文件中通过 include 引入vhosts 目录下所有配置文件
<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">server {</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> listen <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">80</span>;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> server_name laravelswoole.com;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> root <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"/www/laravel_swoole/public"</span>;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> location / {</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> index index.php index.html;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> autoindex off;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> }</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> location ~ \.php(.*)<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$ </span>{</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> fastcgi_pass <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:9000;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> fastcgi_index index.php;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> fastcgi_split_path_info ^((?U).<span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">+</span>\.php)(/?.<span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">+</span>)<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$;</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> fastcgi_param SCRIPT_FILENAME <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$document_root$fastcgi_script_name</span>;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> fastcgi_param PATH_INFO <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$fastcgi_path_info</span>;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> fastcgi_param PATH_TRANSLATED <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$document_root$fastcgi_path_info</span>;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> include fastcgi_params;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> }</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">}</span>
第三步:重启nginx
<span style="color: rgb(255, 255, 255);">systemctl restart nginx.service</span><br></br>
第四步:windows10本机配置hosts文件
<span style="color: rgb(255, 255, 255);">192.168.157.129 laravelswoole.com</span><br></br>
安装Laravel-s
第一步:安装Laravels
<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">cd</span> laravel_swoole/</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 安装</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">composer require hhxsv5/laravel-s</span>
第二步:生成配置
<span style="color: rgb(255, 255, 255);">php artisan laravels publish</span><br></br>
Laravel5.5以上版本不再需要手动配置app.php了。此命令完成之后即可使用。
第三步:运行Laravel-S
<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">php</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">bin</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">/</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">laravels</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">start</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">_</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">_</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">_____</span> </span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">|</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">|</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">|</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">|/</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">____</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">|</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">|</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">|</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">__</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">_</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">_</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">__</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">__</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">___</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">_____</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">|</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">|</span> (<span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">___</span> </span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">|</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">|</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">/</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">_`</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">|</span> <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'__/ _` \ \ / / _ \ |\___ \ </span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">| |___| (_| | | | (_| |\ V / __/ |____) |</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">|______\__,_|_| \__,_| \_/ \___|_|_____/ </span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> </span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">Speed up your Laravel/Lumen</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">>>> Components</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">+---------------------------+---------+</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">| Component | Version |</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">+---------------------------+---------+</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">| PHP | 7.4.11 |</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">| Swoole | 4.5.5 |</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">| LaravelS | 3.7.8 |</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">| Laravel Framework [local] | 8.11.2 |</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">+---------------------------+---------+</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">>>> Protocols</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">+-----------+--------+-------------------+----------------+</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">| Protocol | Status | Handler | Listen At |</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">+-----------+--------+-------------------+----------------+</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">| Main HTTP | On | Laravel Framework | 127.0.0.1:5200 |</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">+-----------+--------+-------------------+----------------+</span></span>
运行之后通过 ip+端口即可访问,如192.168.157.129:5200
第四步:配置nginx
注意了,这里是为Laravel-S单独配置一个服务器。传统的配置是nginx接收到一个php请求后转发给php-fmp处理;实现高性能Swoole HTTP服务器,这里是将请求转发给LaravelS处理。
<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">cd</span> /usr/local/nginx/conf/vhosts</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">vim</span> laravel_s.conf</span>
<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">upstream laravels {</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> server <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:5200 <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">weight</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">5</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">max_fails</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">3</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">fail_timeout</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span>30s;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> keepalive <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">16</span>;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">}</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">server {</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> listen <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">80</span>;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> server_name laravel-s.com;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> root /www/laravel_swoole/public;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> index index.php index.html index.htm;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> location / {</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> try_files <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$uri</span> @laravels;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> }</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> location @laravels {</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> proxy_http_version <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span>.1;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> proxy_set_header Connection <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">""</span>;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> proxy_set_header X-Real-IP <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$remote_addr</span>;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> proxy_set_header X-Real-PORT <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$remote_port</span>;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> proxy_set_header X-Forwarded-For <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$proxy_add_x_forwarded_for</span>;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> proxy_set_header Host <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$http_host</span>;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> proxy_set_header Scheme <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$scheme</span>;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> proxy_set_header Server-Protocol <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$server_protocol</span>;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> proxy_set_header Server-Name <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$server_name</span>;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> proxy_set_header Server-Addr <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$server_addr</span>;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> proxy_set_header Server-Port <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$server_port</span>;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> proxy_pass http://laravels;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> }</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">}</span>
第五步:重启nginx
<span style="color: rgb(255, 255, 255);">systemctl restart nginx.service</span><br></br>
第六步:windows10配置hosts文件
<span style="color: rgb(255, 255, 255);">192.168.157.129 laravel-s.com</span><br></br>
到这里就已经配置完成。配置基于域名之后,端口访问失败了。
说明:laravelswoole.com 是基础传统的HTTP服务器;laravel-s是基于Swoole。
性能测试对比
使用ab压力测试工具进行对比测试。
基于php-fpm的压力测试
<span style="color: rgb(255, 255, 255);">ab -n 500 -c 100 http://laravelswoole.com</span><br></br>
<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">Server Software: nginx/1.18.0</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">Server Hostname: laravelswoole.com</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">Server Port: <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">80</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">...<span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">#省略</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">Concurrency Level: <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">10</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">Time taken <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">for</span> tests: <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">5</span>.806 seconds</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">Complete requests: <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">100</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">Failed requests: <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">Non-2xx responses: <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">100</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">Total transferred: <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">52046500</span> bytes</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">HTML transferred: <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">52024900</span> bytes</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">Requests per second: <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">17</span>.22 [<span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">#/sec] (mean)</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">Time per request: <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">580</span>.583 [ms] (mean)</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">Time per request: <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">58</span>.058 [ms] (mean, across all concurrent requests)</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">Transfer rate: <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">8754</span>.41 [Kbytes/sec] received</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">...<span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">#省略</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">Percentage of the requests served within a certain time (ms)</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">50</span>% <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">574</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">66</span>% <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">587</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">75</span>% <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">596</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">80</span>% <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">607</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">90</span>% <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">642</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">95</span>% <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">668</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">98</span>% <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">677</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">99</span>% <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">686</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">100</span>% <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">686</span> (longest request)</span>
可以看到每秒处理请求是 17.22个。
基于swoole的压力测试
<span style="color: rgb(255, 255, 255);">ab -n 500 -c 100 http://laravel-s.com/</span><br></br>
<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">Server Software: nginx/1.18.0</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">Server Hostname: laravel-s.com</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">Server Port: <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">80</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">...<span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">#省略</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">Concurrency Level: <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">100</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">Time taken <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">for</span> tests: <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span>.803 seconds</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">Complete requests: <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">500</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">Failed requests: <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">Total transferred: <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">9254500</span> bytes</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">HTML transferred: <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">8729000</span> bytes</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">Requests per second: <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">622</span>.59 [<span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">#/sec] (mean)</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">Time per request: <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">160</span>.620 [ms] (mean)</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">Time per request: <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span>.606 [ms] (mean, across all concurrent requests)</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">Transfer rate: <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">11253</span>.38 [Kbytes/sec] received</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">...<span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">#省略</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">Percentage of the requests served within a certain time (ms)</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">50</span>% <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">138</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">66</span>% <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">144</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">75</span>% <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">161</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">80</span>% <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">167</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">90</span>% <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">204</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">95</span>% <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">229</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">98</span>% <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">240</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">99</span>% <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">244</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">100</span>% <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">273</span> (longest request)</span>
可以看到基于swoole服务器之后的处理请求数是622.59。
总结
从中可以看到基于swoole之后很明显的优化,处理请求数大大提高。php-fmp是17.22,swoole是622.59。差距非常大。
配置的过程中遇到了一些错误,主要是配置虚拟主机的错误,好在都解决了。如果你也遇到相似的问题,欢迎一起讨论学习。
我是小白,期待和优秀的你一起同行!
小白
2020年11月01日