PHP群:95885625 Hbuilder+MUI群:81989597 站长QQ:634381967
    您现在的位置: 首页 > 开发编程 > Laravel教程 > 正文

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

    作者:admin来源:网络浏览:时间:2020-09-30 00:07:50我要评论
    导读:1.是什么限制Laravel框架的速度?Laravel框架启动的时候需要加载很多文件,再加上其出了名的生态环境好,所以在开发过程中我们就会发现有非...
    1.是什么限制Laravel框架的速度?

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

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

     

    2.Swoole

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

     

    3.使用Swoole提升Laravel的性能

    在现有的轮子中,感觉下面这两个还是非常不错的,可以自行选择

    博主选择了第一个,不要问我为什么,任性!然后我们就开始吧!

    使用composer安装:

    composer require swooletw/laravel-swoole

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

    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 中配置信息

     

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

    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前:

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

    使用swoole后:

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

     

    这里是使用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:

    1. server { 
    2.     listen 80; 
    3.     server_name your.domain.com; 
    4.     root /path/to/laravel/public
    5.     index index.php; 
    6.  
    7.     location = /index.php { 
    8.         # Ensure that there is no such file named "not_exists" 
    9.         # in your "public" directory. 
    10.         try_files /not_exists @swoole; 
    11.     } 
    12.  
    13.     location / { 
    14.         try_files $uri $uri/ @swoole; 
    15.     } 
    16.  
    17.     location @swoole { 
    18.         set $suffix ""
    19.  
    20.         if ($uri = /index.php) { 
    21.             set $suffix "/"
    22.         } 
    23.  
    24.         proxy_set_header Host $host
    25.         proxy_set_header SERVER_PORT $server_port
    26.         proxy_set_header REMOTE_ADDR $remote_addr
    27.         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for
    28.  
    29.         # IF https 
    30.         # proxy_set_header HTTPS "on"
    31.  
    32.         proxy_pass http://127.0.0.1:1215$suffix; 
    33.     } 

     

    转载请注明(B5教程网)原文链接:https://b5.mxunkeji.com/content-153-6140-1.html
    相关热词搜索: