使用 Swoole 來加速你的 Laravel 應用

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

爲何要在 Swoole 上運行 Laravel?
下圖展現了 PHP 的生命週期。正如你所看到的那樣,當你每次運行 PHP 腳本的時候,PHP都須要初始化模塊併爲你的運行環境啓動Zend引擎。而且將 PHP 腳本編譯爲 OpCodes 以便 Zend引擎執行。linux

可是, 這樣的生命週期須要在每次請求的時候都執行一遍。由於單個請求建立的環境在請求執行結束後會當即銷燬。laravel

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


所以若是咱們利用 Swoole 內置一個應用級別的 Server, 而且全部腳本文件在加載一次以後即可以保存在內存中呢? 這就是爲何咱們須要嘗試在 Swoole 上運行 Laravel。 Swoole 能夠提供強大性能而 Laravel 則能夠提供優雅代碼結構使用。這倆兒真是完美組合 !bootstrap

安裝
如下是 swooletw/laravel-swoole 的主要特色:數組

在 Swoole 運行 Laravel/Lumen 應用
出色的性能提高至 30x
沙盒模式隔離應用程序容器
支持在 Laravel 應用中運行 WebSocket 服務器
支持 Socket.io 協議
支持 Swoole 表跨進程共享
使用 Composer 安裝:服務器

$ composer require swooletw/laravel-swoole
1
2
這個包依賴於 Swoole 。在使用這個包以前,請確保你的機器安裝了正確的 Swoole 。使用下面的命令快速安裝(linux):swoole

pecl install swoole
1
2
在安裝這個擴展以後,你須要編輯 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
1
2
3
4
訪問 官網 獲取更多的信息。app

注意:Swoole 如今只支持 Linux 和 OSX 。Windows 服務器如今還不支持。

而後,添加服務提供者:

若是你使用 Laravel ,在 config/app.php 服務提供者數組添加該服務提供者:

[
'providers' => [
SwooleTW\Http\LaravelServiceProvider::class,
],
]
1
2
3
4
5
6
若是你使用 Lumen ,請將下面的代碼添加到 bootstrap/app.php:

$app->register(SwooleTW\Http\LumenServiceProvider::class);
1
2
這個包支持包自動發現機制。若是你運行 Laravel 5.5 以上版本,你能夠跳過這一步。

創建並運行起來
如今,你能夠執行如下的命令來啓動 Swoole HTTP 服務。

$ php artisan swoole:http start
1
2
而後你能夠看到如下信息:

Starting swoole http server...
Swoole http server started: <http://127.0.0.1:1215>
1
2
3
如今能夠經過訪問 http://127.0.0.1:1215 來進入 Laravel 應用。

基準測試
使用 MacBook Air 13寸(2015年產)及乾淨的 Lumen 5.5 項目測試:
基準測試工具: wrk

wrk -t4 -c100 http://your.app12基於 FPM 的 NginxRunning 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.21KB123456789Swoole 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————————————————版權聲明:本文爲CSDN博主「SummerCaff」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連接及本聲明。原文連接:https://blog.csdn.net/summerliguilong/article/details/80347714

相關文章
相關標籤/搜索