為什么要在 swoole 上運行 laravel?因為使用 swoole 可以加速 laravel 應用。下面本篇文章就來帶大家聊聊怎么在swoole上使用laravel,希望對大家有所幫助!
Swoole?是為 php 開發的生產級異步編程框架。 他是一個純 C 開發的擴展, 他允許 PHP 開發者在 PHP 中寫 高性能,可擴展的并發 TCP, udp, unix socket, http, websocket 服務, 而不需要擁有太多的非阻塞 I/O 編程和低級別的 linux 內核知識。 你可以把?Swoole?想象成 NodeJS, 但對于 PHP 來說將有更高性能。【推薦學習: swoole】
為什么要在 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?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'?=>?[ ????????SwooleTWHttpLaravelServiceProvider::class, ????], ]
如果你使用?Lumen ,請將下面的代碼添加到?bootstrap/app.php:
$app->register(SwooleTWHttpLumenServiceProvider::class);
這個包支持包自動發現機制。如果你運行 Laravel 5.5 以上版本,你可以跳過這一步。
建立并運行起來
現在,你可以執行以下的命令來啟動 Swoole HTTP 服務。
$?php?artisan?swoole:http?start
然后你可以看到以下信息:
Starting?swoole?http?server... Swoole?http?server?started:?<http:></http:>
現在可以通過訪問?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 查看官方包, 也可以參考?swoole?獲取更多信息。
英文原文地址:https://laravel-news.com/laravel-swoole?
【相關推薦:swoole】