国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

為什么Swoole可以加速php

bergwhite / 1003人閱讀

摘要:前言最近在研究,原來一直聽別人在說可以加速,一直都是懵逼的。,全稱,中文譯作快速公共網管接口。那么,我們為什么不能像之前一樣,能夠不重新加載配置文件的,來一個不用加載這么多的依賴的方式呢當然可以啦,這時候就派上用場了。

前言

最近在研究Swoole,原來一直聽別人在說Swoole可以加速,一直都是懵逼的。在研究了Swoole之后,我有了一些自己的理解。

PHP-CGI 的黑歷史

對于 PHP 處理網絡請求,大家基本上也都是再用 CGI 的方式來做的。那么,什么是 CGI 呢。

CGI

CGI,全稱 Common Gateway Interface,中文稱作“公共網關接口”。也許有很多人認為 CGI 是一個程序,沒錯,曾經的我也是這么認為的。直到我從《圖解HTTP》開始細細地研究HTTP協議之后,我才知道,原來 CGI 是一種協議。任何編程語言,都可以實現 CGI,所以任何語言都可以作為網站的后臺語言(扯遠了)。

PHP-CGI

上面說了,CGI 是一個協議,所以,PHP 有自己對 CGI 的實現,那就是 PHP-CGI。可是呢,隨著技術的發展,人們開始意識到,PHP-CGI 的性能不是那么盡如人意。我們知道,PHP 在運行的時候,是依賴配置文件 php.ini的。所以,每當 PHP-CGI 開始工作的時候,它是完完全全的一個新進程,它需要重新加載配置文件并初始化,這就造成了很大的資源和時間的浪費。

FastCGI

那么,怎么才能避免這種浪費呢,聰明的程序員們想出了另外一種方法:我們為什么不預先加載好配置,然后,每一個執行的任務只需要復制當前的進程,不就能避免上面的浪費了么。于是, FastCGI 便橫空出世。

FastCGI,全稱 Fast Common Gateway Interface,中文譯作“快速公共網管接口”。沒錯,這又是個協議。當然,這個協議并不是因為 PHP 才有的。

Apache (httpd)

幾乎所有的 Web 容器都實現了 FastCGI 的功能。首先是 httpd。對于 PHP 來說,httpd 是通過自身來實現一個 FastCGI 的模塊的。它會預先加載好 php.ini 文件中的配置。待到有請求進入需要 PHP 處理時,PHP 就不需要再對 php.ini 重新加載了。這也就是每改動過 php.ini 后都要重啟 httpd 服務的原因。

Nginx 與 php-fpm

php-fpm 也是 FastCGI 的一種實現。通常我們是將 NginxPHP 處理部分代理到 php-fpm 的端口上,交給 php-fpm 來處理。而 php-fpm 同樣是通過預先加載配置,然后給到子進程的方式的,它會對進程做一些管理。

Swoole

辣么問題來了,php-fpm 雖然實現了 FastCGI,但是,它在處理請求的時候,依然要重新運行一個腳本,像 Laravel 一樣的框架,一開始就要加載辣么多依賴和文件,依然是一個不小的開銷。我們看一下 Laravelpublic/index.php 的源碼。

require __DIR__."/../bootstrap/autoload.php";
$app = require_once __DIR__."/../bootstrap/app.php";
$kernel = $app->make(IlluminateContractsHttpKernel::class);
$response = $kernel->handle(
    $request = IlluminateHttpRequest::capture()
);
$response->send();
$kernel->terminate($request, $response);

看看前面兩條語句,這需要加載多少個依賴啊,這都是大把大把的時間和資源啊,每一次請求都需要加載一邊,真是心疼啊。

那么,我們為什么不能像之前一樣,能夠不重新加載配置文件的 FastCGI ,來一個不用加載這么多的依賴的方式呢?

當然可以啦,這時候 Swoole 就派上用場了。既然是通過 $app->make 的方式來生成一個新的 Kernel 對象,那么 Application 的對象 $app 自然是不會有什么改變的了。所以,我們可以在收到請求之前,就把 $app 給生成好,這樣就會快了,不是么?我們可以對它進行一個簡單的改造。

require __DIR__."/../bootstrap/autoload.php";
$app = require_once __DIR__."/../bootstrap/app.php";
$serv = new SwooleServerHttp("127.0.0.1", 9501);
$serv->on("request", function ($req, $res) use ($app) {
    $kernel = $app->make(IlluminateContractsHttpKernel::class);
    $response = $kernel->handle(
        $request = IlluminateHttpRequest::capture()
    );
    $res->end($response);
    $kernel->terminate($request, $response);
});
$serv->start();

好了,我們現在就可以通過執行這個腳本來監聽9501端口了。然后就像 Nginx 配置 php-fpm 一樣來配置它就可以了。這樣我們可以看到,在收到請求之前,就已經把依賴加載干凈了,剩下的就是處理請求了。

當然我的這個改動很簡陋,根本無法用于生產環境的,只是提供一個例子。

后記

以上只是我自己的理解和對我自己的理解進行的總結。對于 Swoole 我還在探索當中,因為它需要的只是實在是太多了,需要一點一點積累。本文可能有不對的地方,歡迎各位大神來拍磚!

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/39542.html

相關文章

  • 了解swoole運行模式,加速laravel應用

    摘要:負責解釋執行文件生成響應,最終返回給,展現至前端。相比于傳統架構,進程模型最大的特點在于其多線程模式處理網絡請求,使得其能輕松應對大量連接。這要求開發人員對于多進程的運行模式有更清晰的認識更容易內存泄露。 一、SwooleSwoole號稱重新定義了PHP,它是一個PHP擴展,使得PHP可以使用異步的方式執行,就像node一樣,而且還能使用socket,為PHP提供了一系列異步IO、事件...

    時飛 評論0 收藏0
  • 使用 Swoole加速你的 Laravel 應用

    摘要:是為開發的生產級異步編程框架。因為單個請求創建的環境在請求執行結束后會立即銷毀。可以提供強大性能而則可以提供優雅代碼結構使用。在使用這個包之前,請確保你的機器安裝了正確的。建立并運行起來現在,你可以執行以下的命令來啟動服務。 showImg(https://segmentfault.com/img/bVbaF89?w=1240&h=634); Swoole?是為 PHP 開發的生產級異...

    snifes 評論0 收藏0
  • 使用 Swoole 加速 Laravel

    摘要:因為為單個請求創建的環境將在請求過程完成后立即銷毀。可以成為強大的性能增強器,提供了優雅的結構和代碼使用方式。你可以使用此命令快速安裝它,并訪問官方網站獲取更多信息。注意目前僅支持和。服務器不能使用。基準測試使用進行干凈的測試。 Swoole 是針對PHP的生產級異步編程框架。它是一種用純C語言編寫的PHP擴展,它使PHP開發人員能夠在PHP中編寫高性能,可擴展的并發TCP,UDP,U...

    didikee 評論0 收藏0
  • 什么Swoole可以加速php

    摘要:前言最近在研究,原來一直聽別人在說可以加速,一直都是懵逼的。,全稱,中文譯作快速公共網管接口。那么,我們為什么不能像之前一樣,能夠不重新加載配置文件的,來一個不用加載這么多的依賴的方式呢當然可以啦,這時候就派上用場了。 前言 最近在研究Swoole,原來一直聽別人在說Swoole可以加速,一直都是懵逼的。在研究了Swoole之后,我有了一些自己的理解。 PHP-CGI 的黑歷史 對于 ...

    y1chuan 評論0 收藏0
  • 使用Swoole加速Laravel(正式環境中)

    摘要:如需要支持熱啟動,請自行谷歌,大概原理就是用監控文件變更,如果更新了重啟如果正式環境中還可以自己寫個部署腳本,后重啟服務等,方法很多不一一列舉。 1 Laravel的速度瓶頸在哪? 1.1 已有的一些優化方法 1.1.1 laravel官方提供了一些優化laravel的優化方法 php artisan optimize php artisan config:cache php arti...

    vibiu 評論0 收藏0

發表評論

0條評論

bergwhite

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<