欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

thinkphp5支不支swoole攜程-創(chuàng)新互聯(lián)

這篇文章給大家分享的是有關(guān)thinkphp5支不支swoole攜程的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

在蔡甸等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專(zhuān)注、極致的服務(wù)理念,為客戶(hù)提供成都做網(wǎng)站、成都網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作定制設(shè)計(jì),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,全網(wǎng)整合營(yíng)銷(xiāo)推廣,成都外貿(mào)網(wǎng)站制作,蔡甸網(wǎng)站建設(shè)費(fèi)用合理。

首先,了解一下ThinkPHP的運(yùn)行機(jī)制。

TP5運(yùn)行機(jī)制

任何請(qǐng)求都會(huì)經(jīng)過(guò)tp5的入口文件,載入框架的配置文件,啟動(dòng)進(jìn)程,然后處理請(qǐng)求。

thinkphp5支不支swoole攜程

在這個(gè)index.php的入口文件中,可以看到,它先定義的APP_PATH這個(gè)常量,然后引入的框架的啟動(dòng)文件start.php,那我們就去看下start.php這個(gè)文件做了些什么。

thinkphp5支不支swoole攜程

在這里,它先加載了基礎(chǔ)文件base.php,然后啟動(dòng)框架run,這個(gè)時(shí)候就開(kāi)始處理請(qǐng)求了。

常規(guī)的nginx,Apache服務(wù)器,每次請(qǐng)求來(lái)到thinkphp,會(huì)清除靜態(tài)變量,重新加載配置文件。但是,swoole做的服務(wù)器,是常駐進(jìn)程,在啟動(dòng)服務(wù)后,會(huì)產(chǎn)生多個(gè)進(jìn)程,來(lái)處理請(qǐng)求。我們要讓它選擇性的加載配置。

Swoole來(lái)做http服務(wù)器

<?php
$http = new swoole_http_server("0.0.0.0", 8888);

$http->set(
    [
        'enable_static_handler' => true,
        'document_root' => "/data/wwwroot/zhibo/public/static",
        'worker_num' => 5,//產(chǎn)生進(jìn)程的個(gè)數(shù)
    ]
);
$http->on('WorkerStart',function ($ser,$worker_id){
    define('APP_PATH', __DIR__ . '/../application/');
    require __DIR__ . '/../thinkphp/base.php';
});
$http->on('request', function($request, $response) use($http) {
    if(isset($request->header)){
        foreach ($request->header as $k=>$v){
            $_SERVER[strtoupper($k)] = $v;
        }
    }
    if(isset($request->server)){
        foreach ($request->server as $k=>$v){
            $_HEADER[strtoupper($k)] = $v;
        }
    }
    $_GET = [];
    if(isset($request->get)){
        foreach ($request->get as $k=>$v){
            $_GET[$k] = $v;
        }
    }
    $_POST = [];
    if(isset($request->post)){
        foreach ($request->post as $k=>$v){
            $_POST[$k] = $v;
        }
    }
    // 執(zhí)行應(yīng)用并響應(yīng)
    //開(kāi)啟緩存
    ob_start();
    try{
        think\Container::get('app', [APP_PATH])->run()->send();
    }catch (\Exception $e){

    }
    $res = ob_get_contents();
    ob_end_clean();
    $response->end($res);
    //$http->close();
});
$http->start();

代碼說(shuō)明

(1)$http->onWorkerStart:?jiǎn)?dòng)進(jìn)程的時(shí)候,加載thinkphp的框架文件,base.php,但是這個(gè)時(shí)候,不能run,等待請(qǐng)求來(lái)了再去run。

(2)$http->onrequest:當(dāng)收到客戶(hù)端的請(qǐng)求時(shí),把swoole的header頭信息,server信息,get數(shù)據(jù),post數(shù)據(jù)等消息轉(zhuǎn)化為常規(guī)的$_SERVER,$_GET等信息,可以適配tp5。

(3)最后開(kāi)始run,這個(gè)時(shí)候需要把run得到的信息加載到緩存,然后再通過(guò)send()返回給客戶(hù)端。

Swoole適配thinkphp5

因?yàn)閟woole是常駐進(jìn)程,前一個(gè)請(qǐng)求的$_POST,$_GET請(qǐng)求不會(huì)銷(xiāo)毀,原因這個(gè)進(jìn)程并沒(méi)有kill,這個(gè)時(shí)候,需要在接收請(qǐng)求的時(shí)候,將$_GET,$_POST置空。

swoole路由機(jī)制,總會(huì)從緩存中獲取有沒(méi)有這個(gè)請(qǐng)求,如果有,就不加載新的,所以,swoole常駐內(nèi)存,會(huì)發(fā)現(xiàn)一直請(qǐng)求第一個(gè)url。除非重啟swoole服務(wù)器。

thinkphp5支不支swoole攜程

在thinkphp框架里面,修改Request文件,將兩個(gè)方法(pathinfo,path)里面的$this->path這個(gè)為空的判斷去掉,讓每次請(qǐng)求都去解析這個(gè)url。


驗(yàn)證結(jié)果

thinkphp5支不支swoole攜程

thinkphp5支不支swoole攜程

感謝各位的閱讀!關(guān)于“thinkphp5支不支swoole攜程”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

網(wǎng)頁(yè)標(biāo)題:thinkphp5支不支swoole攜程-創(chuàng)新互聯(lián)
文章出自:http://www.chinadenli.net/article40/dhoheo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶(hù)體驗(yàn)企業(yè)建站響應(yīng)式網(wǎng)站建站公司品牌網(wǎng)站制作外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司