編程學習網 > PHP技術 > swoole > 如何使用swoole來加速laravel應用
2021
08-13

如何使用swoole來加速laravel應用

swoole 是為 PHP 開發的生產級異步編程框架。 他是一個純 C 開發的擴展, 他允許 PHP 開發者在 PHP 中寫 高性能,可擴展的并發 TCP, UDP, Unix socket, HTTP, WebSocket 服務, 而不需要擁有太多的非阻塞 I/O 編程和低級別的 Linux 內核知識。 你可以把 Swoole 想象成 NodeJS, 但對于 PHP 來說將有更高性能。

為什么要在 Swoole 上運行 Laravel?

下圖展示了 PHP 的生命周期。正如你所看到的那樣,當你每次運行 PHP 腳本的時候,PHP 都需要初始化模塊并為你的運行環境啟動 Zend 引擎。并且將 PHP 腳本編譯為 OpCodes 以便 Zend 引擎執行。

但是, 這樣的生命周期需要在每次請求的時候都執行一遍。因為單個請求創建的環境在請求執行結束后會立即銷毀。

換句話說, 在傳統的 PHP 生命周期中, 為了腳本執行而浪費了大量的時間去創建和銷毀資源。想象一下像 Laravel 這樣的框架, 在每次請求中需要加載多少文件?同時也浪費了大量的 I/O 操作

使用 Swoole 來加速你的 Laravel 應用


因此如果我們利用 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 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


以上就是“如何使用swoole來加速laravel應用”的詳細內容,想要了解更多swoole教程歡迎關注編程學習網

掃碼二維碼 獲取免費視頻學習資料

Python編程學習

查 看2022高級編程視頻教程免費獲取