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 引擎执行。
但是, 这样的生命周期需要在每次请求的时候都执行一遍。因为单个请求创建的环境在请求执行结束后会立即销毁。
因此如果我们利用 Swoole 内置一个应用级别的 Server, 并且所有脚本文件在加载一次之后便可以保存在内存中呢? 这就是为什么我们需要尝试在 Swoole 上运行 Laravel。Swoole可以成为强大的性能提升器,而Laravel提供了优雅的结构和代码用法。那是一个完美的组合!
安装
以下是 swooletw/laravel-swoole 的主要特点:
使用Composer需要此软件包:
$ composer require swooletw/laravel-swoole
该软件包依赖Swoole扩展。使用此软件包之前,请确保已安装Swoole。使用此命令快速安装它:
pecl install swoole
然后,添加服务提供者:
[ 'providers' => [ SwooleTW\Http\LaravelServiceProvider::class, ],1)"> ]
$app->register(SwooleTW\Http\LumenServiceProvider::class);
建立并运行起来
现在,你可以执行以下的命令来启动 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 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