PHP Swoole+Laravel框架HTTP服务加速
1. php-fpm 的优缺点
优点:部署简单 调试方便 基于传统 php 的项目非常多,易于参考。
缺点:每次 http 请求都要加载全部的项目文件 php-fpm 性能不佳,并发性能不好 核心不支持异步IO处理,IO密集型请求响应变长 对网络通信协议的支持不好。
我们用的 PHP 主要用于 web 开发,通过 nginx、apache 等服务端程序调用 php-fpm 处理服务端的业务逻 辑,处理完后 php 撤消内存并返回结果。一个 web 请求就要加载一次 php 的全部文件,需要的系统资源 开销很大,这是目前 php-fpm 的缺点之一;并且因为 php-fpm 在一次请求结束就释放内存,无法做连接池,也不合适 service 端的开发。
2. Swoole避免文件的反复加载
swoole中,可以在onworkerstart 的时候提前一次性把一些必要的文件和配置加载好,不必每次receive重复加载一遍。将PHP代码加载到内存中,拥有更长的生命周期,不用反复加载和释放内存,提高运行效率。
3. Swoole给Laravel框架加速配置
前面已经安装了laravelS,这里直接通过nginx配置替换php-fpm,由laravelS接管。
编辑nginx配置如下:
upstream laravels {
# 通过 IP:Port 连接
# 通config/laravels.php中listen_ip listen_port保持一致
server 127.0.0.1:5201 weight=5 max_fails=5 fail_timeout=30s;
keepalive 16;
}
server {
listen 80;
server_name blog.ebeast.club;
#charset koi8-r;
#access_log logs/host.access.log main;
root /项目目录/public;
index index.html index.htm index.php;
location / {
try_files $uri @laravels;
}
location @laravels {
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-PORT $remote_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header Scheme $scheme;
proxy_set_header Server-Protocol $server_protocol;
proxy_set_header Server-Name $server_name;
proxy_set_header Server-Addr $server_addr;
proxy_set_header Server-Port $server_port;
proxy_pass http://laravels;
}
}
最后重启nginx。