如何使用Swoole来加速你的Laravel应用

Swoole 是为 PHP 开发的生产级异步编程框架。 他是一个纯 C 开发的扩展, 他允许 PHP 开发者在 PHP 中写 高性能,可扩展的并发 TCP, UDP, Unix socket, HTTP, WebSocket 服务, 而不需要拥有太多的非阻塞 I/O 编程和低级别的 Linux 内核知识。 你可以把 Swoole 想象成 NodeJS, 但对于 PHP 来说将有更高性能。

我的官方群点击进入

说到做到,700粉丝福利安排PHP进阶资料,免费获取

【社群福利】30G-PHP进阶资料,助力大家都能30K

为什么要在 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 。使用下面的命令快速安装(linux):

pecl install swoole

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

php -i | grep php.ini                      # check the php.ini file locationsudo echo "extension=swoole.so" >> php.ini  # add the extension=swoole.so to the end of php.iniphp -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 readRequests/sec:     80.93Transfer/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 readRequests/sec:   8717.00Transfer/sec:      1.55MB

更多信息

Github Repo 查看官方包, 也可以参考 官方文档 获取更多信息。

大厂必备面试题

PHP经典面试题集(含答案)

面试12家公司,收获9个offer,2020年PHP 面试问题

100 个常见的 PHP 面试题和答案分享

PHP 面试遇到的问题,后期会不定期更新一下,大家也可以把认为经典的问题评论留言,感谢大家!

喜欢我的文章就关注我吧,持续更新中.....

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

转自链接:使用 Swoole 来加速你的 Laravel 应用
喜欢我的文章就点赞关注吧

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351