使用 Swoole 來(lái)加速你的 Laravel 應(yīng)用

file

Swoole 是為 PHP 開(kāi)發(fā)的生產(chǎn)級(jí)異步編程框架嬉橙。 他是一個(gè)純 C 開(kāi)發(fā)的擴(kuò)展华弓, 他允許 PHP 開(kāi)發(fā)者在 PHP 中寫 高性能润樱,可擴(kuò)展的并發(fā) TCP舷嗡, UDP衣赶, Unix socket调缨, HTTP慨菱, WebSocket 服務(wù)燃箭, 而不需要擁有太多的非阻塞 I/O 編程和低級(jí)別的 Linux 內(nèi)核知識(shí)。 你可以把 Swoole 想象成 NodeJS鸥咖, 但對(duì)于 PHP 來(lái)說(shuō)將有更高性能燕鸽。

為什么要在 Swoole 上運(yùn)行 Laravel?

下圖展示了 PHP 的生命周期。正如你所看到的那樣啼辣,當(dāng)你每次運(yùn)行 PHP 腳本的時(shí)候啊研,PHP都需要初始化模塊并為你的運(yùn)行環(huán)境啟動(dòng)Zend引擎。并且將 PHP 腳本編譯為 OpCodes 以便 Zend引擎執(zhí)行鸥拧。

但是党远, 這樣的生命周期需要在每次請(qǐng)求的時(shí)候都執(zhí)行一遍。因?yàn)閱蝹€(gè)請(qǐng)求創(chuàng)建的環(huán)境在請(qǐng)求執(zhí)行結(jié)束后會(huì)立即銷毀富弦。

換句話說(shuō)沟娱, 在傳統(tǒng)的 PHP 生命周期中, 為了腳本執(zhí)行而浪費(fèi)了大量的時(shí)間去創(chuàng)建和銷毀資源腕柜。想象一下像 Laravel 這樣的框架济似, 在每次請(qǐng)求中需要加載多少文件? 同時(shí)也浪費(fèi)了大量的 I/O 操作


file

因此如果我們利用 Swoole 內(nèi)置一個(gè)應(yīng)用級(jí)別的 Server, 并且所有腳本文件在加載一次之后便可以保存在內(nèi)存中呢盏缤? 這就是為什么我們需要嘗試在 Swoole 上運(yùn)行 Laravel碱屁。 Swoole 可以提供強(qiáng)大性能而 Laravel 則可以提供優(yōu)雅代碼結(jié)構(gòu)使用。這倆兒真是完美組合 !

安裝

以下是 swooletw/laravel-swoole 的主要特點(diǎn):

  • 在 Swoole 運(yùn)行 Laravel/Lumen 應(yīng)用
  • 出色的性能提升至 30x
  • 沙盒模式隔離應(yīng)用程序容器
  • 支持在 Laravel 應(yīng)用中運(yùn)行 WebSocket 服務(wù)器
  • 支持 Socket.io 協(xié)議
  • 支持 Swoole 表跨進(jìn)程共享

使用 Composer 安裝:

$ composer require swooletw/laravel-swoole

這個(gè)包依賴于 Swoole 蛾找。在使用這個(gè)包之前娩脾,請(qǐng)確保你的機(jī)器安裝了正確的 Swoole 。使用下面的命令快速安裝(linux):

pecl install swoole

在安裝這個(gè)擴(kuò)展之后打毛,你需要編輯 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

訪問(wèn) 官網(wǎng) 獲取更多的信息。

注意:Swoole 現(xiàn)在只支持 Linux 和 OSX 幻枉。Windows 服務(wù)器現(xiàn)在還不支持碰声。

然后,添加服務(wù)提供者:

如果你使用 Laravel 熬甫,在 config/app.php 服務(wù)提供者數(shù)組添加該服務(wù)提供者:

[
    'providers' => [
        SwooleTW\Http\LaravelServiceProvider::class,
    ],
]

如果你使用 Lumen 胰挑,請(qǐng)將下面的代碼添加到 bootstrap/app.php

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

這個(gè)包支持包自動(dòng)發(fā)現(xiàn)機(jī)制。如果你運(yùn)行 Laravel 5.5 以上版本椿肩,你可以跳過(guò)這一步瞻颂。

建立并運(yùn)行起來(lái)

現(xiàn)在,你可以執(zhí)行以下的命令來(lái)啟動(dòng) Swoole HTTP 服務(wù)郑象。

$ php artisan swoole:http start

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

Starting swoole http server...
Swoole http server started: <http://127.0.0.1:1215>

現(xiàn)在可以通過(guò)訪問(wèn) http://127.0.0.1:1215 來(lái)進(jìn)入 Laravel 應(yīng)用贡这。

基準(zhǔn)測(cè)試

使用 MacBook Air 13寸(2015年產(chǎn))及干凈的 Lumen 5.5 項(xiàng)目測(cè)試:
基準(zhǔn)測(cè)試工具: 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 服務(wù)

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

更多信息

Github Repo 查看官方包, 也可以參考 官方文檔 獲取更多信息厂榛。

更多現(xiàn)代化 PHP 知識(shí)盖矫,請(qǐng)前往 Laravel / PHP 知識(shí)社區(qū)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末丽惭,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子辈双,更是在濱河造成了極大的恐慌责掏,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件湃望,死亡現(xiàn)場(chǎng)離奇詭異拷橘,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)喜爷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)萄唇,“玉大人檩帐,你說(shuō)我怎么就攤上這事×碛” “怎么了湃密?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)四敞。 經(jīng)常有香客問(wèn)我泛源,道長(zhǎng),這世上最難降的妖魔是什么忿危? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任达箍,我火速辦了婚禮,結(jié)果婚禮上铺厨,老公的妹妹穿的比我還像新娘缎玫。我一直安慰自己,他們只是感情好解滓,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布赃磨。 她就那樣靜靜地躺著,像睡著了一般洼裤。 火紅的嫁衣襯著肌膚如雪邻辉。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,268評(píng)論 1 309
  • 那天腮鞍,我揣著相機(jī)與錄音值骇,去河邊找鬼。 笑死移国,一個(gè)胖子當(dāng)著我的面吹牛雷客,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播桥狡,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼搅裙,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼皱卓!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起部逮,我...
    開(kāi)封第一講書(shū)人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤娜汁,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后兄朋,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體掐禁,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年颅和,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了傅事。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡峡扩,死狀恐怖蹭越,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情教届,我是刑警寧澤响鹃,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站案训,受9級(jí)特大地震影響买置,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜强霎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一忿项、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧城舞,春花似錦倦卖、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至秦踪,卻和暖如春褐捻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背椅邓。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工柠逞, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人景馁。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓板壮,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親合住。 傳聞我的和親對(duì)象是個(gè)殘疾皇子绰精,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 原文鏈接 必備品 文檔:Documentation API:API Reference 視頻:Laracasts ...
    layjoy閱讀 8,609評(píng)論 0 121
  • 必備品文檔:DocumentationAPI: API Reference視頻:Laracasts速查表:Lara...
    ethanzhang閱讀 5,746評(píng)論 0 68
  • Laravel 學(xué)習(xí)交流 QQ 群:375462817 本文檔前言Laravel 文檔寫的很好撒璧,只是新手看起來(lái)會(huì)有...
    Leonzai閱讀 7,972評(píng)論 2 12
  • 代理商與網(wǎng)點(diǎn)模式 渠道寬窄取決于渠道的每個(gè)環(huán)節(jié)中使用同類型中間商數(shù)目的多少。企業(yè)使用的同類中間商多 笨使,產(chǎn)品在市場(chǎng)上...
    Msf閱讀 2,892評(píng)論 0 9
  • 誤區(qū):想賺大錢 卿樱?那就得有冒險(xiǎn)精神! 在所有文化里硫椰,每個(gè)小孩子在成長(zhǎng)的過(guò)程中繁调,都以“膽怯”,“懦弱”為恥靶草,都以“勇...
    新小派自由行走的花閱讀 211評(píng)論 0 0