使用 Swoole 加速 Laravel

Swoole 是針對PHP的生產級異步編程框架。它是一種用純C語言編寫的PHP擴展,它使PHP開發人員可以在PHP中編寫高性能,可擴展的併發TCP,UDP,Unix套接字,HTTP,WebSocket服務,而無需太多的非阻塞I/O編程和Linux內核知識。 你能夠將Swoole想象成NodeJS,可是對於PHP來講,性能更高。php

爲何要在Swoole上運行Laravel

下圖說明了PHP中的生命週期。 正如你所看到的,當你每次運行php腳本時,PHP都須要初始化模塊併爲你的運行環境啓動Zend Engine。 而且你的PHP腳本須要編譯爲OpCodes以供Zend Engine執行。laravel

可是,這個生命週期須要在每一個請求中重複一遍。由於爲單個請求建立的環境將在請求過程完成後當即銷燬。git

換句話說,在傳統的PHP生命週期中,它浪費了大量時間爲腳本執行構建和銷燬資源。 想象一下像 Laravel 這樣的框架,須要爲一個請求加載多少個文件? 加載文件也有不少I/O消耗。github

PHP生命週期

那麼若是咱們在Swoole之上有一個內置的服務器,而且全部的腳本能夠在第一次加載後保存在內存中呢? 這就是咱們試圖在Swoole上運行Laravel的緣由。 Swoole能夠成爲強大的性能加強器,Laravel提供了優雅的結構和代碼使用方式。 這是一個完美的組合!編程

安裝

如下是 swooletw/laravel-swoole 的主要特色:bootstrap

  • 在Swoole上運行 Laravel/Lumen 應用程序
  • 卓越的性能提高至 30倍
  • 沙箱模式隔離應用程序容器
  • 支持在Laravel中運行WebSocket服務器
  • 支持Socket.io協議
  • 支持Swoole表進行跨進程數據共享

使用Composer安裝:數組

composer require swooletw/laravel-swoole -vvv
這個軟件包依賴於Swoole。請確保你的機器具備Swoole擴展。你可使用此命令快速安裝它: pecl install swoole,並訪問 官方網站獲取更多信息。
注意:Swoole目前僅支持Linux和macOS。 Windows服務器不能使用Swoole。

而後,添加服務提供者:bash

若是你使用的是Laravel,請將服務提供者添加到 config/app.php 中提供者的數組中:服務器

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

若是您使用的是 Lumen,請將如下代碼附加到 bootstrap/app.php:swoole

$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

Nginx with FPM

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 Server

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官方文檔獲取更多信息。

原文地址,請前往 PHPCasts
相關文章
相關標籤/搜索