使用swoole来加速你的laravel应用
- 為什么要用swoole來加速laravel呢?
下圖展示了PHP的生命周期,正如你所看到的那樣,當(dāng)你每次運行PHP腳本的時候,PHP都需要初始化模塊并為你的運行環(huán)境啟動Zend引擎,中間會經(jīng)過語法分析、詞法分析,最后把你的代碼編譯為OpCode來交給Zend引擎執(zhí)行。
但是,這樣的生命周期需要在每次請求的時候都執(zhí)行一遍,因為單個請求創(chuàng)建的環(huán)境在請求執(zhí)行結(jié)束之后會立即銷毀。
換句話說,在傳統(tǒng)的PHP生命周期中,為了腳本執(zhí)行而浪費了大量的時間去創(chuàng)建和銷毀資源。想象一下Laravel這樣的框架,在每次請求中需要加載多少文件?同時也需要大量的I/O操作。這將花費大量的時間。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
因此如果我們利用swoole內(nèi)置一個應(yīng)用級別的Server,并且所有的腳本文件在加載一次之后便可以保存在內(nèi)存中,那性能會有很大的提升。Swoole可以提供強大性能而Laravel則可以提供優(yōu)雅的代碼結(jié)構(gòu),這倆真是完美組合。
?
- 安裝
首先需要安裝swoole擴展,具體可參考我的另一篇文章? ?鏈接
使用composer安裝swooletw插件
composer require swooletw/laravel-swoole然后添加服務(wù)提供者:
如果你使用的Laravel,在config/app.php 服務(wù)提供者數(shù)組中添加該服務(wù)提供者:
['providers' => [SwooleTW\Http\LaravelServiceProvider::class,], ]如果你使用的Lumen,請將下面的代碼加到bootstrap/app.php
$app->register(SwooleTW\Http\LumenServiceProvider::class);將包中的配置文件發(fā)布到 app/config 中
//config下生成swoole_http.conf和swoole_websocket.php以及routes下websocket.php php artisan vendor:publish --tag=laravel-swoole- 啟動
swoole直接對外服務(wù)
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應(yīng)用。
?
?
使用nginx代理對外服務(wù)(推薦這種)
nginx配置
map $http_upgrade $connection_upgrade {default upgrade;'' close; } server {listen 80;server_name your.domain.com;root /path/to/laravel/public;index index.php;location = /index.php {# Ensure that there is no such file named "not_exists"# in your "public" directory.try_files /not_exists @swoole;}# any php files must not be accessed#location ~* \.php$ {# return 404;#}location / {try_files $uri $uri/ @swoole;}location @swoole {set $suffix "";if ($uri = /index.php) {set $suffix ?$query_string;}proxy_set_header Host $http_host;proxy_set_header Scheme $scheme;proxy_set_header SERVER_PORT $server_port;proxy_set_header REMOTE_ADDR $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection $connection_upgrade;# IF https# proxy_set_header HTTPS "on";proxy_pass http://127.0.0.1:1215$suffix;}配置完成后可直接通過域名訪問。
?
最后說一下在使用中遇到的問題:
PHP中的超全局變量無法使用
- $_POST
- $_GET
- $_SERVER
- $_FILES
- $_COOKIE
- $_REQUEST
推薦通過 Illuminate\Http\Request 對象來獲取請求信息
?
?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的使用swoole来加速你的laravel应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 马士兵mysql_MYSQL相关总结(马
- 下一篇: 逻辑覆盖测试