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

blank

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

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

Laravel框架启动的时候需要加载很多文件,再加上其出了名的生态环境好,所以在开发过程中我们就会发现有非常多的已经造好的轮子,这也就使得Laravel的一次启动的磁盘IO特别高(就是要加载很多文件),现在的问题就是:每次启动Laravel的时候不都重新加载这些文件就好了,所以用swoole就能很好的解决。

2.Swoole

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

3.使用Swoole提升Laravel的性能

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

  • swooletw/laravel-swoole
  • garveen/laravoole

这里小编选择了swooletw/laravel-swoole

使用composer安装:

composerrequireswooletw/laravel-swoole如果你使用的是laravel,那么在config/app.phpproviders数组中加上SwooleTWHttpLaravelServiceProvider::class,</pre>如果你使用的是lumen,那么在bootstrap/app.php中加入如下代码$app->register(SwooleTWHttpLumenServiceProvider::class);将配置文件导出到config目录下phpartisanvendor:publish--provider="SwooleTWHttpHttpServiceProvider"然后可以去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' => [
    // AppProvidersAuthServiceProvider::class,
]

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

Artisan Commands

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

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

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

所以我们可以通过以下命令来启动swoole_http_server

phpartisanswoole:httpstart

现在可以通过配置文件里的host和port去访问Laravel了,例如我的配置是: 127.0.0.1:1215

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

4.性能测试

下面让我们来看两张图。

使用swoole前:

blankblank

使用swoole后:

blankblank

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

ab-n1000-c10http://127.0.0.1:1215

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

5.使用Nginx代理

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

那么,我们就增加需要配置nginx.conf里的server:

server{listen80;server_nameyour.domain.com;root/path/to/laravel/public;indexindex.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_headerHost$host;proxy_set_headerSERVER_PORT$server_port;proxy_set_headerREMOTE_ADDR$remote_addr;proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;# IF https
# proxy_set_header HTTPS "on";
proxy_passhttp://127.0.0.1:1215$suffix;}}

至此,大功告成,你可以像平常一样访问你的网站了。

以上内容希望帮助到大家,需要更多文章可以关注公众号:PHP从入门到精通,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些PHP高级、架构视频资料和大厂PHP面试PDF免费获取,需要戳这里PHP进阶架构师>>>实战视频、大厂面试文档免费获取

What do you think?

Written by marketer

blank

互联网经营都要办理icp许可证吗?

blank

laravel面试题(全网最全必考面试题)