如我们所知,PHP是一种解释型语言,这意味着当PHP脚本运行时,解释器负责对代码进行解析、编译和执行,这会导致浪费CPU资源和额外的时间。
在这里,Swoole就来帮助我们了,Swoole专为构建大规模并发系统而设计,它只加载一次应用程序,并将其保存在内存中,为所有请求提供服务,而无需在每个请求上启动应用程序。
基本上,Swoole是一个扩展PHP核心的PHP扩展,利用了操作系统提供的更多功能。
让我们立即通过使用“Laravel Octane”在Laravel应用程序中实现Swoole。
内容概述:
- Swoole安装。
- Laravel-octane安装。
- Supervisor安装,用于在Swoole上运行Laravel应用程序。
- “wrk”——用于检查服务器负载的HTTP基准测试工具。
- 作为代理在Nginx或Apache后面提供Laravel-octane应用程序。
先决条件:
你的Laravel应用程序应该在Nginx或Apache上运行。(假设你的Laravel应用程序在本地机器上的_http://test-app.test/_上运行)
步骤1:在Ubuntu上安装Swoole。
要安装PHP 8.0的Swoole,请运行以下命令-
# Install Swoole as PHP extension
sudo apt install php8.0-swoole# Verify Swoole is loaded
php -m | grep swoole
要使用PECL安装Swoole-
# Install PECL
sudo apt install php-dev# Install Swoole via PECL
sudo pecl install swoole
步骤2:在Laravel应用程序中安装Laravel-Octane。
通过使用Composer安装laravel-octane-
composer require laravel/octane
现在,你可以通过Octane运行和检查Laravel应用程序-
php artisan octane:start --server=swoole --port=8089
步骤3:安装Supervisor。
由于我们需要一种方法来一直保持“octane:start”进程运行,因此我们需要Supervisor(或任何进程管理器)来在Swoole上运行Laravel应用程序。
要在Ubuntu机器上安装Supervisor,你应该运行以下命令:
# Install
sudo apt-get install supervisor -y# Verify the above installation
supervisord -v# Check the status of Supervisor service
sudo systemctl status supervisor
现在,进入“/etc/supervisor/conf.d”目录,并创建一个新的Laravel-Octane工作程序,如下所示:
[program:laravel-octane-worker]process_name=%(program_name)s_%(process_num)02dcommand=php path_of_laravel_project/artisan octane:start --server=swoole --max-requests=1000 --workers=4 --task-workers=12 --port=8089autostart=true
autorestart=true
user=www-data
redirect_stderr=true
stdout_logfile=any_existing_path/laravel-octane-worker.log
stopwaitsecs=3600
如上所述,在上面的工作程序中,Laravel应用程序正在Swoole上运行,你可以在“http://127.0.0.1:8089”上检查它。
请记住,在上面的工作程序中,你需要替换“path_of_laravel_project”和“stdout_logfile”的路径。
运行以下命令以执行上述工作程序:
# Inform supervisor to read workers again.
sudo supervisorctl reread# Tell supervisor to bring the changes into effect
sudo supervisorctl update# Restart supervisor service
sudo supervisorctl restart all
步骤4:使用HTTP基准测试工具进行服务器负载测试。
你可以安装“wrk”(或任何其他)HTTP基准测试工具,以检查运行在Nginx+PHP-FPM和Swoole上的应用程序的负载。
运行以下命令以检查在使用Nginx+PHP-FPM运行的Laravel应用程序上的负载:
wrk -t 4 -c 100 -d30s http://test-app.test
上面命令的结果会像下面这样:
在上面的截图中,你可以看到Nginx+PHP-FPM能够处理257个请求每秒。
现在,让我们尝试运行在使用Swoole服务器的http://127.0.0.1:8089上的laravel-octane应用程序:
在上面的截图中,你可以看到Swoole服务器能够处理每秒414个请求,比Nginx快得多。
步骤5:作为代理在Nginx或Apache后面提供Laravel-octane应用程序。
在“/etc/nginx/sites-enabled”中的Nginx主机文件中添加代理= http://127.0.0.1:8089,如下所示:
server {
listen 80;
server_name test-app.test;
root path_of_your_laravel_app_directory/public; index index.html index.htm index.php; error_page 404 /index.php; location / {
proxy_pass http://127.0.0.1:8089;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
在这里,Nginx正在为运行在端口8089上的Swoole服务器提供代理请求,这意味着现在http://test-app.test实际上正在Swoole服务器上运行。
同样,如果你正在使用Apache作为Web服务器,则可以添加如下代理:
<VirtualHost *:80>
ProxyPreserveHost On ProxyPass / http://127.0.0.1:8089/
ProxyPassReverse / http://127.0.0.1:8089/ ServerName test-app.test
ServerAdmin admin@localhost
DocumentRoot path_of_your_laravel_app_directory/public; <Directory path_of_your_laravel_app_directory/public>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
结论:
在上面的教程中,我们讨论了如何使用Swoole而不是Nginx+PHP-FPM来提高应用程序的性能。对于PHP开发人员来说,这是一个巨大的改变,特别是考虑到请求的生命周期。
评论(0)