久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      thinkphp5支持swoole攜程嗎

      thinkphp5支持swoole攜程嗎

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

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

      任何請(qǐng)求都會(huì)經(jīng)過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í)候就開始處理請(qǐng)求了。

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

      Swoole來做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)     //開啟緩存     ob_start();     try{         thinkContainer::get('app', [APP_PATH])->run()->send();     }catch (Exception $e){      }     $res = ob_get_contents();     ob_end_clean();     $response->end($res);     //$http->close(); }); $http->start();

      代碼說明

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

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

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

      Swoole適配thinkphp5

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

      swoole路由機(jī)制,總會(huì)從緩存中獲取有沒有這個(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攜程嗎

      以上內(nèi)容僅供參考!

      想了解

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)