在Laravel中使用swoole来取代nginx做为http服务器

1.是什么限制Laravel框架的速度?php

Laravel框架启动的时候须要加载不少文件,再加上其出了名的生态环境好,因此在开发过程当中咱们就会发现有很是多的已经造好的轮子,这也就使得Laravel的一次启动的磁盘IO特别高(就是要加载不少文件嘛),博主以前的一遍博客Laravel5框架性能优化技巧中也提到过一些优化,可是并无实质的解决磁盘IO高的问题。html

既然已经知道了问题所在,那就很容易解决了,只要每次启动Laravel的时候不都从新加载这些文件就行了,这时候大名鼎鼎的swoole就登场了。前端

 

2.Swoolenode

Swoole号称从新定义了PHP,它是一个PHP扩展,使得PHP可使用异步的方式执行,就像node同样,并且还能使用socket,为PHP提供了一系列异步IO、事件驱动、并行数据结构功能。Swoole 能够普遍应用于互联网、移动通讯、企业软件、云计算、网络游戏、物联网(IOT)、车联网、智能家居等领域。它能够大大提高项目的性能。linux

 

3.使用Swoole提高Laravel的性能nginx

在现有的轮子中,感受下面这两个仍是很是不错的,能够自行选择
laravel

博主选择了第一个,不要问我为何,任性!而后咱们就开始吧!git

使用composer安装:github

composer require swooletw/laravel-swoole

若是你使用的是laravel,那么在 config/app.php 的 providers 数组中加上bootstrap

SwooleTW\Http\LaravelServiceProvider::class,

若是你使用的是lumen,那么在 bootstrap/app.php 中加入以下代码

 $app->register(SwooleTW\Http\LumenServiceProvider::class); 

将配置文件导出到 config 目录下

 php artisan vendor:publish --provider="SwooleTW\Http\HttpServiceProvider"

而后能够去 config/swoole_http.php 中配置信息

'server' => [
        'host' => env('SWOOLE_HTTP_HOST', '127.0.0.1'),
        'port' => env('SWOOLE_HTTP_PORT', '1215'),
        'options' => [
            'pid_file' => env('SWOOLE_HTTP_PID_FILE', base_path('storage/logs/swoole_http.pid')),
            'log_file' => env('SWOOLE_HTTP_LOG_FILE', base_path('storage/logs/swoole_http.log')),
            'daemonize' => env('SWOOLE_HTTP_DAEMONIZE', 1),
        ],
],

host和post不用多说,options里面的具体配置能够去swoole官网查看详细参数信息。

 swoole_http.php 里还提供配置 providers 数组,

'providers' => [
    // App\Providers\AuthServiceProvider::class,
]

由于使用swoole做为http后,这些providers会被存到内存中,因此这里配置的是每次请求都想要从新注册和从新启动的providers。

Artisan Commands

这个轮子彻底使用artisan命令来操做。

 php artisan swoole:http start|stop|restart|reload 

依次是,启动/中止/重启/重载。

因此咱们能够经过如下命令来启动swoole_http_server

php artisan swoole:http start

如今能够经过配置文件里的host和port去访问Laravel了,例如个人配置是: 127.0.0.1:1215 

注意:该拓展是不支持热启动的,因此每次有代码更新都要重启服务 php artisan swoole:http restart 。固然你也能够在linux上写一个脚本,让 git pull 代码后自动重启服务。

 

4.性能测试

下面让咱们来看两张图。

使用swoole前:

使用swoole后:

 

这里是使用Apache的ab测试工具

ab -n1000 -c10 http://127.0.0.1:1215

咱们能够惊奇的发现, Request per second 从原来的20多,提高到了600多。将近提高了30倍左右。啊,多么痛的领悟!!

 

5.使用Nginx代理

swoole在官网也提到过:swoole_http_server对Http协议的支持并不完整,建议仅做为应用服务器。而且在前端增长Nginx做为代理。

那么,咱们就增长须要配置nginx.conf里的server:

server {
    listen 80;
    server_name your.domain.com;
    root /path/to/laravel/public;
    index index.php;

    location = /index.php {
        # Ensure that there is no such file named "not_exists"
        # in your "public" directory.
        try_files /not_exists @swoole;
    }

    location / {
        try_files $uri $uri/ @swoole;
    }

    location @swoole {
        set $suffix "";

        if ($uri = /index.php) {
            set $suffix "/";
        }

        proxy_set_header Host $host;
        proxy_set_header SERVER_PORT $server_port;
        proxy_set_header REMOTE_ADDR $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        # IF https
        # proxy_set_header HTTPS "on";

        proxy_pass http://127.0.0.1:1215$suffix;
    }
}

至此,大功告成,你能够像日常同样访问你的网站了。

相关文章
相关标签/搜索