成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

為什么Swoole可以加速php

bergwhite / 1007人閱讀

摘要:前言最近在研究,原來(lái)一直聽(tīng)別人在說(shuō)可以加速,一直都是懵逼的。,全稱,中文譯作快速公共網(wǎng)管接口。那么,我們?yōu)槭裁床荒芟裰耙粯?,能夠不重新加載配置文件的,來(lái)一個(gè)不用加載這么多的依賴的方式呢當(dāng)然可以啦,這時(shí)候就派上用場(chǎng)了。

前言

最近在研究Swoole,原來(lái)一直聽(tīng)別人在說(shuō)Swoole可以加速,一直都是懵逼的。在研究了Swoole之后,我有了一些自己的理解。

PHP-CGI 的黑歷史

對(duì)于 PHP 處理網(wǎng)絡(luò)請(qǐng)求,大家基本上也都是再用 CGI 的方式來(lái)做的。那么,什么是 CGI 呢。

CGI

CGI,全稱 Common Gateway Interface,中文稱作“公共網(wǎng)關(guān)接口”。也許有很多人認(rèn)為 CGI 是一個(gè)程序,沒(méi)錯(cuò),曾經(jīng)的我也是這么認(rèn)為的。直到我從《圖解HTTP》開(kāi)始細(xì)細(xì)地研究HTTP協(xié)議之后,我才知道,原來(lái) CGI 是一種協(xié)議。任何編程語(yǔ)言,都可以實(shí)現(xiàn) CGI,所以任何語(yǔ)言都可以作為網(wǎng)站的后臺(tái)語(yǔ)言(扯遠(yuǎn)了)。

PHP-CGI

上面說(shuō)了,CGI 是一個(gè)協(xié)議,所以,PHP 有自己對(duì) CGI 的實(shí)現(xiàn),那就是 PHP-CGI??墒悄?,隨著技術(shù)的發(fā)展,人們開(kāi)始意識(shí)到,PHP-CGI 的性能不是那么盡如人意。我們知道,PHP 在運(yùn)行的時(shí)候,是依賴配置文件 php.ini的。所以,每當(dāng) PHP-CGI 開(kāi)始工作的時(shí)候,它是完完全全的一個(gè)新進(jìn)程,它需要重新加載配置文件并初始化,這就造成了很大的資源和時(shí)間的浪費(fèi)。

FastCGI

那么,怎么才能避免這種浪費(fèi)呢,聰明的程序員們想出了另外一種方法:我們?yōu)槭裁床活A(yù)先加載好配置,然后,每一個(gè)執(zhí)行的任務(wù)只需要復(fù)制當(dāng)前的進(jìn)程,不就能避免上面的浪費(fèi)了么。于是, FastCGI 便橫空出世。

FastCGI,全稱 Fast Common Gateway Interface,中文譯作“快速公共網(wǎng)管接口”。沒(méi)錯(cuò),這又是個(gè)協(xié)議。當(dāng)然,這個(gè)協(xié)議并不是因?yàn)?PHP 才有的。

Apache (httpd)

幾乎所有的 Web 容器都實(shí)現(xiàn)了 FastCGI 的功能。首先是 httpd。對(duì)于 PHP 來(lái)說(shuō),httpd 是通過(guò)自身來(lái)實(shí)現(xiàn)一個(gè) FastCGI 的模塊的。它會(huì)預(yù)先加載好 php.ini 文件中的配置。待到有請(qǐng)求進(jìn)入需要 PHP 處理時(shí),PHP 就不需要再對(duì) php.ini 重新加載了。這也就是每改動(dòng)過(guò) php.ini 后都要重啟 httpd 服務(wù)的原因。

Nginx 與 php-fpm

php-fpm 也是 FastCGI 的一種實(shí)現(xiàn)。通常我們是將 NginxPHP 處理部分代理到 php-fpm 的端口上,交給 php-fpm 來(lái)處理。而 php-fpm 同樣是通過(guò)預(yù)先加載配置,然后給到子進(jìn)程的方式的,它會(huì)對(duì)進(jìn)程做一些管理。

Swoole

辣么問(wèn)題來(lái)了,php-fpm 雖然實(shí)現(xiàn)了 FastCGI,但是,它在處理請(qǐng)求的時(shí)候,依然要重新運(yùn)行一個(gè)腳本,像 Laravel 一樣的框架,一開(kāi)始就要加載辣么多依賴和文件,依然是一個(gè)不小的開(kāi)銷。我們看一下 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);

看看前面兩條語(yǔ)句,這需要加載多少個(gè)依賴啊,這都是大把大把的時(shí)間和資源啊,每一次請(qǐng)求都需要加載一邊,真是心疼啊。

那么,我們?yōu)槭裁床荒芟裰耙粯?,能夠不重新加載配置文件的 FastCGI ,來(lái)一個(gè)不用加載這么多的依賴的方式呢?

當(dāng)然可以啦,這時(shí)候 Swoole 就派上用場(chǎng)了。既然是通過(guò) $app->make 的方式來(lái)生成一個(gè)新的 Kernel 對(duì)象,那么 Application 的對(duì)象 $app 自然是不會(huì)有什么改變的了。所以,我們可以在收到請(qǐng)求之前,就把 $app 給生成好,這樣就會(huì)快了,不是么?我們可以對(duì)它進(jìn)行一個(gè)簡(jiǎn)單的改造。

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();

好了,我們現(xiàn)在就可以通過(guò)執(zhí)行這個(gè)腳本來(lái)監(jiān)聽(tīng)9501端口了。然后就像 Nginx 配置 php-fpm 一樣來(lái)配置它就可以了。這樣我們可以看到,在收到請(qǐng)求之前,就已經(jīng)把依賴加載干凈了,剩下的就是處理請(qǐng)求了。

當(dāng)然我的這個(gè)改動(dòng)很簡(jiǎn)陋,根本無(wú)法用于生產(chǎn)環(huán)境的,只是提供一個(gè)例子。

后記

以上只是我自己的理解和對(duì)我自己的理解進(jìn)行的總結(jié)。對(duì)于 Swoole 我還在探索當(dāng)中,因?yàn)樗枰闹皇菍?shí)在是太多了,需要一點(diǎn)一點(diǎn)積累。本文可能有不對(duì)的地方,歡迎各位大神來(lái)拍磚!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/39542.html

相關(guān)文章

  • 了解swoole運(yùn)行模式,加速laravel應(yīng)用

    摘要:負(fù)責(zé)解釋執(zhí)行文件生成響應(yīng),最終返回給,展現(xiàn)至前端。相比于傳統(tǒng)架構(gòu),進(jìn)程模型最大的特點(diǎn)在于其多線程模式處理網(wǎng)絡(luò)請(qǐng)求,使得其能輕松應(yīng)對(duì)大量連接。這要求開(kāi)發(fā)人員對(duì)于多進(jìn)程的運(yùn)行模式有更清晰的認(rèn)識(shí)更容易內(nèi)存泄露。 一、SwooleSwoole號(hào)稱重新定義了PHP,它是一個(gè)PHP擴(kuò)展,使得PHP可以使用異步的方式執(zhí)行,就像node一樣,而且還能使用socket,為PHP提供了一系列異步IO、事件...

    時(shí)飛 評(píng)論0 收藏0
  • 使用 Swoole 來(lái)加速你的 Laravel 應(yīng)用

    摘要:是為開(kāi)發(fā)的生產(chǎn)級(jí)異步編程框架。因?yàn)閱蝹€(gè)請(qǐng)求創(chuàng)建的環(huán)境在請(qǐng)求執(zhí)行結(jié)束后會(huì)立即銷毀??梢蕴峁?qiáng)大性能而則可以提供優(yōu)雅代碼結(jié)構(gòu)使用。在使用這個(gè)包之前,請(qǐng)確保你的機(jī)器安裝了正確的。建立并運(yùn)行起來(lái)現(xiàn)在,你可以執(zhí)行以下的命令來(lái)啟動(dòng)服務(wù)。 showImg(https://segmentfault.com/img/bVbaF89?w=1240&h=634); Swoole?是為 PHP 開(kāi)發(fā)的生產(chǎn)級(jí)異...

    snifes 評(píng)論0 收藏0
  • 使用 Swoole 加速 Laravel

    摘要:因?yàn)闉閱蝹€(gè)請(qǐng)求創(chuàng)建的環(huán)境將在請(qǐng)求過(guò)程完成后立即銷毀??梢猿蔀閺?qiáng)大的性能增強(qiáng)器,提供了優(yōu)雅的結(jié)構(gòu)和代碼使用方式。你可以使用此命令快速安裝它,并訪問(wèn)官方網(wǎng)站獲取更多信息。注意目前僅支持和。服務(wù)器不能使用?;鶞?zhǔn)測(cè)試使用進(jìn)行干凈的測(cè)試。 Swoole 是針對(duì)PHP的生產(chǎn)級(jí)異步編程框架。它是一種用純C語(yǔ)言編寫(xiě)的PHP擴(kuò)展,它使PHP開(kāi)發(fā)人員能夠在PHP中編寫(xiě)高性能,可擴(kuò)展的并發(fā)TCP,UDP,U...

    didikee 評(píng)論0 收藏0
  • 什么Swoole可以加速php

    摘要:前言最近在研究,原來(lái)一直聽(tīng)別人在說(shuō)可以加速,一直都是懵逼的。,全稱,中文譯作快速公共網(wǎng)管接口。那么,我們?yōu)槭裁床荒芟裰耙粯?,能夠不重新加載配置文件的,來(lái)一個(gè)不用加載這么多的依賴的方式呢當(dāng)然可以啦,這時(shí)候就派上用場(chǎng)了。 前言 最近在研究Swoole,原來(lái)一直聽(tīng)別人在說(shuō)Swoole可以加速,一直都是懵逼的。在研究了Swoole之后,我有了一些自己的理解。 PHP-CGI 的黑歷史 對(duì)于 ...

    y1chuan 評(píng)論0 收藏0
  • 使用Swoole加速Laravel(正式環(huán)境中)

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

    vibiu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<