在Swoole上加速Laravel应用

Swoole是用于PHP的生产级异步编程框架。它是用纯C语言编写的PHP扩展,它使PHP开发人员可以在PHP中编写高性能,可伸缩的并发TCP,UDP,Unix套接字,HTTP,WebSocket服务,而无需过多了解非阻塞I / O编程和低级Linux内核。你可以将 Swoole视为 NodeJS之类,但适用于PHP,具有更高的性能。

为什么要在 Swoole 上运行 Laravel?

下图展示了 PHP 的生命周期。正如你所看到的那样,当你每次运行 PHP 脚本的时候,PHP 都需要初始化模块并为你的运行环境启动 Zend 引擎。并且将 PHP 脚本编译为 OpCodes 以便 Zend 引擎执行。

但是, 这样的生命周期需要在每次请求的时候都执行一遍。因为单个请求创建的环境在请求执行结束后会立即销毁。

换句话说, 在传统的 PHP 生命周期中,它浪费了大量时间来构建和破坏用于脚本执行的资源。想象一下像 Laravel 这样的框架, 在每次请求中需要加载多少文件?加载文件也有很多I / O消耗。

因此如果我们利用 Swoole 内置一个应用级别的 Server, 并且所有脚本文件在加载一次之后便可以保存在内存中呢? 这就是为什么我们需要尝试在 Swoole 上运行 Laravel。Swoole可以成为强大的性能提升器,而Laravel提供了优雅的结构和代码用法。那是一个完美的组合!

安装

以下是 swooletw/laravel-swoole 的主要特点:

  · 在 Swoole 运行 Laravel/Lumen 应用

  · 出色的性能提升至 30x

  · 沙盒模式隔离应用程序容器

  · 支持在 Laravel 应用中运行 WebSocket 服务器

  · 支持 Socket.io 协议

  · 支持 Swoole 表跨进程数据共享

使用Composer需要此软件包:

$ composer require swooletw/laravel-swoole

该软件包依赖Swoole扩展。使用此软件包之前,请确保已安装Swoole。使用此命令快速安装它:

pecl install swoole

在安装这个扩展之后,你需要编辑 php.ini 添加 extension=swoole.so 一行。

php -i | grep php.ini                      # check the php.ini file location

sudo echo "extension=swoole.so" >> php.ini  # add the extension=swoole.so to the end of php.ini

php -m | grep swoole                      # check if the swoole extension has been enabled

* 注意:Swoole 现在只支持 Linux 和 OSX 。Windows 服务器现在还不支持。

然后,添加服务提供者:

如果你使用 Laravel ,在 config/app.php 服务提供者数组添加该服务提供者:

[

    'providers' => [

        SwooleTW\Http\LaravelServiceProvider::class,

    ],

]

如果你使用 Lumen ,请将下面的代码添加到 bootstrap/app.php:

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

这个包支持包自动发现机制。如果你运行 Laravel 5.5 以上版本,你可以跳过这一步。

建立并运行起来

现在,你可以执行以下的命令来启动 Swoole HTTP 服务。

$ php artisan swoole:http start

然后你可以看到以下信息:

Starting swoole http server...

Swoole http server started: <http://127.0.0.1:1215>

现在可以通过访问 http://127.0.0.1:1215 来进入 Laravel 应用。

基准测试

使用 MacBook Air 13 寸(2015 年产)及干净的 Lumen 5.5 项目测试:

基准测试工具: wrk

wrk -t4 -c100 http://your.app

基于 FPM 的 Nginx

Running 10s test @ http://lumen.app:9999

  4 threads and 100 connections

  Thread Stats  Avg      Stdev    Max  +/- Stdev

    Latency    1.14s  191.03ms  1.40s    90.31%

    Req/Sec    22.65    10.65    50.00    65.31%

  815 requests in 10.07s, 223.65KB read

Requests/sec:    80.93

Transfer/sec:    22.21KB

Swoole HTTP 服务

Running 10s test @ http://127.0.0.1:1215

  4 threads and 100 connections

  Thread Stats  Avg      Stdev    Max  +/- Stdev

    Latency    11.58ms    4.74ms  68.73ms  81.63%

    Req/Sec    2.19k  357.43    2.90k    69.50%

  87879 requests in 10.08s, 15.67MB read

Requests/sec:  8717.00

Transfer/sec:      1.55MB

更多学习内容可以访问【对标大厂】精品PHP架构师教程目录大全,只要你能看完保证薪资上升一个台阶(持续更新)

以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要的可以加入我的PHP技术交流群953224940

进阶PHP月薪30k>>>架构师成长路线【视频、面试文档免费获取】


©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容