swoole-加速laravel框架

1. 简介

在swoole中可以为我们提供http服务,http服务既可以用于我们日常的web开发中,同时它也可以对thinkphp、laravel等框架进行加速,但要使用swoole对常规框架加速,该框架必须是IOC类型的才可以,这是因为swoole是常驻内存的。

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

2. php-fpm优缺点

2.1. 优点

  • 部署简单
  • 调试方便
  • 基于传统 php 的项目非常多,易于参考

2.2. 缺点

  • 每次 http 请求都要加载全部的项目文件
  • php-fpm 性能不佳,并发性能不好
  • 核心不支持异步IO处理,IO密集型请求响应变长
  • 对网络通信协议的支持不好,应用场景基本被限制在web领域

3. swoole的区别

swoole是完全的长驻内存的,长驻内存一个最大的好处就是可以性能加速。在swoole中可以在onworkerstart的时候提前一次性把一些必要的文件和配置加载好,不必每次receive重复加载一遍,这样能提升不小的性能。

4. swoole加速laravel框架

<?php

define('LARAVEL_START', microtime(true));

require __DIR__.'/../vendor/autoload.php';
// 初始化laravel的应用程序
$app = require_once __DIR__.'/../bootstrap/app.php';
// 创建laravel的http处理核心对象
$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);

// 高性能HTTP服务器
$http = new Swoole\Http\Server("0.0.0.0", 9501);
// http请求事件
$http->on("request", function ($request_swoole, $response_swoole) use ($kernel){ 
    $response = $kernel->handle(
        $request = Illuminate\Http\Request::capture()
    );
    // 返回结果
    $response_swoole->end($response->send());
    // 停止中间件
    $kernel->terminate($request, $response);
});

$http->start();

5. laravel使用swoole的组件

# 安装laravel
composer create-project --prefer-dist laravel/laravel blog
# 安装LaravelS扩展包
composer require hhxsv5/laravel-s
# 运行Artisan命令将相应脚本和配置文件发布到根目录下
# 该命令会发布配置文件laravels.php到config目录下,以及脚本文件到 bin 目录下
php artisan laravels publish
# 修改.env文件下的环境变量
LARAVELS_LISTEN_IP=0.0.0.0
LARAVELS_LISTEN_PORT=5200
LARAVELS_WORKER_NUM=4
# 启动
php bin/laravels start

5.1. laravelS常用命令

  • php bin/laravels start 启动
  • php bin/laravels stop 停止
  • php bin/laravels info 显示组件的版本信息
  • php bin/laravels help 显示帮助信息
  • php bin/laravels restart 重启
  • php bin/laravels reload 平滑重启

6. nginx反向代理laravels

# 查看容器内部ip
docker inspect nginx| grep "IP"
# 配置Nginx配置文件
upstream laravels {
	# 172.17.0.4是容器内部ip
	server 172.17.0.4:5200 weight=5 max_fails=3 fail_timeout=30s;
	keepalive 16;
}

server {
        listen 80;
        listen [::]:80;
        server_name localhost;
        root /docker/www/blog/public;
        index index.php index.html;

        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;
        }
}
# 重启docker容器
docker restart nginx
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值