Laravel集成使用swoole的内存托管代码 — swooletw/laravel-swoole

swoole框架可以减少每次访问都需要读取磁盘io的弊端大大的算短程序运行时间,laravel就支持swoole的托管。省去了再去学习新的框架的时间。话不多说,开整:

1.使用composer安装

composer require swooletw/laravel-swoole

2.在 config/app.php 的 providers 数组中加上

SwooleTW\Http\LaravelServiceProvider::class
3.将配置文件导出到 config 目录下
php artisan vendor:publish --provider="SwooleTW\Http\HttpServiceProvider"

4.swoole_http.php 里还提供配置 providers 数组,因为使用swoole作为http后,这些providers会被存到内存中,所以这里配置的是每次请求都想要重新注册和重新启动的providers。

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

5.这个轮子完全使用artisan命令来操作。

php artisan swoole:http start|stop|restart|reload
到这里,代码配置方面基本完成了 需要修改配置文件 nginx文件
直接覆盖lnmp生成的配置文件为下面的内容(这是配置http服务的方法。)
server
    {
    server_name fengbao.zhixiu.vip;
    index index.html index.htm index.php default.html default.htm default.php;
    root /home/wwwroot/www.api.com/public;
    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;
    }
}
下面的内容是添加网站为ssl证书访问的情况下 swoole 做出的处理做了处理。。所有的80 443 均重定向443端口
upstream swoole {
    # 通过 IP:Port 连接
    server 127.0.0.1:1215 weight=5 max_fails=3 fail_timeout=30s;
    keepalive 16;
}

server {
    listen 80;
    server_name www.talksphp.com;
    rewrite ^(.*) https://$server_name$1 permanent;
}

server {
    listen 443 ssl;
    server_name www.talksphp.com;
    index index.html index.htm index.php;
    root /home/wwwroot/www.api.com/public;
    ssl_certificate /etc/cert_files/talksphp/3706353_fengbao.zhixiu.vip.pem;
    ssl_certificate_key /etc/cert_files/talksphp/3706353_fengbao.zhixiu.vip.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    #关闭目录浏览
    autoindex off;

    # Nginx处理静态资源(建议开启gzip),LaravelS处理动态资源。
    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;
    }
    access_log /home/wwwlogs/www.api.com.log;
}

6.每次修改代码需要重启

php artisan swoole restart

7.可以通过配置修改swoole_http.php的参数max_request=1; 可以在每次修改的时候不需要每次都输入重启命令。(可当作调试模式用使用,上线记得改回原来数值 或者改成0)

Read More

发表回复