使用Swoole怎么提高Laravel性能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
成都创新互联公司是专业的黄平网站建设公司,黄平接单;提供成都网站设计、网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行黄平网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
环境1:
硬件: 1 CPU, 4 Cores, 16GB Memory
MacOS 10.15.3
PHP 7.3.12(启用opcache)
Swoole 4.4.13
Shadowfax 2(20个worker进程)
这个环境也就是我个人的Macbook Pro,性能比较好。我用wrk启动4个线程,并发200进行压测:
wrk -t4 -c200 http://127.0.0.1:1215/
结果为 12430 rps:
Running 10s test @ http://127.0.0.1:1215/ 4 threads and 200 connections Thread Stats Avg Stdev Max +/- Stdev Latency 26.44ms 31.44ms 212.73ms 84.28% Req/Sec 3.13k 839.99 6.07k 65.75% 124418 requests in 10.01s, 312.06MB read Socket errors: connect 0, read 54, write 0, timeout 0 Requests/sec: 12430.20 Transfer/sec: 31.18MB
环境2:
硬件: 2 CPUs, 2 Cores, 4GB Memory
CentOS 7.5.1804
PHP 7.3.16(启用opcache)
Swoole 4.4.17
Shadowfax 2(10个worker进程)
这个环境是某云的一个虚拟云服务器实例,配置一般。我用wrk启动2个线程,并发100进行压测:
wrk -c100 http://127.0.0.1:1215/
结果为 4001 rps:
Running 10s test @ http://127.0.0.1:1215/ 2 threads and 100 connections Thread Stats Avg Stdev Max +/- Stdev Latency 25.06ms 12.11ms 85.92ms 60.94% Req/Sec 4.02k 41.46 4.08k 79.79% 40321 requests in 10.08s, 101.13MB read Requests/sec: 4001.76 Transfer/sec: 10.04MB
性能表现还不错吧?比起传统的PHP-FPM,已经有了巨大的提升。
Shadowfax的安装非常简单,只需要两个步骤即可搞定:
第一步,使用Composer将Shadowfax安装到你的Laravel项目中去:
composer require huang-yi/shadowfax
第二步,使用Laravel的Artisan命令shadowfax:publish
来发布配置文件:
php artisan shadowfax:publish
执行完后,在你的项目根目录就会创建一个名为shadowfax.yml
的配置文件,你需要根据环境进行调整。当然这个文件会被自动添加到.gitignore
中去,就像.env
文件一样,在不同的环境下配置可能是不一样的。
现在就可以通过Shadowfax命令来启动你的服务:
php shadowfax start
假如是默认配置的话,就可以通过http://127.0.0.1:1215
访问你的应用了。当然,这只是简单的使用,更多的信息可前往Shadowfax项目主页查看。
当然,有些朋友会问,Github上面已经有类似的开源项目了,为什么还要重复造一个轮子。其实不然,早在2016年我就开始尝试整合Swoole和Laravel了,先后也开源了两个相关的项目,目前这方面star数最高的 swooletw/laravel-swoole 就是fork了我早先发布的 huang-yi/laravel-swoole-http。但我并没有对自己的项目进行推广,因为我很清楚,之前的项目或多或少都存在一些问题,并且不能很好地支持协程,而协程恰好又是Swoole最强的武器,所以都放弃了。
现在,Shadowfax已经可以很好地支持协程了,你可以放心地开启Swoole的协程特性。并且,Shadowfax还解决了协程环境下数据库连接的问题,当你启用Swoole的一键协程化后,Shadowfax会自动为你的数据库连接创建连接池。最重要的是,这一切在你的应用代码层面都是无感的,你还是像往常一样去写业务代码,完全不要有心智负担,因为Shadowfax不需要你对写代码的方式做出任何改变。
最后我想说明的是,Shadowfax并没有去刻意赋予Laravel使用Swoole的能力,它的主要目的是:在不破坏Laravel开发体验的前提下,以最小的成本提升Laravel应用的性能。我也不建议开发者在Laravel中使用Swoole的任何接口,因为Laravel本身是一个传统PHP模式下运行的框架,对Swoole并不友好,如果你不是一个资深的Swoole开发者,很容易在使用过程中出错。如果你的Laravel应用里未使用任何Swoole接口,这意味着你的程序在PHP-FPM模式下也是能运行的,一旦运行在Swoole上面的程序出了问题,我们便能立马切回PHP-FPM模式,这样可以保证程序的可用性。
Laravel 是一套简洁、优雅的PHP Web开发框架。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。
关于使用Swoole怎么提高Laravel性能问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。