摘要:前言也許這是我們最關(guān)系的一個(gè)環(huán)節(jié)了。一個(gè)應(yīng)用簡(jiǎn)單來(lái)說(shuō)無(wú)非就是請(qǐng)求和相應(yīng)了。獲取你真的該補(bǔ)補(bǔ)協(xié)程的相關(guān)知識(shí)了。
前言
分析 RequestHandler也許這是我們最關(guān)系的一個(gè)環(huán)節(jié)了。一個(gè)web應(yīng)用簡(jiǎn)單來(lái)說(shuō)無(wú)非就是請(qǐng)求和相應(yīng)了。
獲取你真的該補(bǔ)補(bǔ) 協(xié)程 的相關(guān)知識(shí)了。不過(guò)。。
不懂協(xié)程懂進(jìn)程~ 那就 當(dāng)成進(jìn)程來(lái)看 一個(gè)請(qǐng)求一個(gè)進(jìn) (xie) 程.
懂線程~ 那就 當(dāng)成 線程來(lái)看 一個(gè)請(qǐng)求一個(gè)線 (xie) 程
vendor/zanphp/http-server/src/RequestHandler.php
class RequestHandler { // ... // 讓 協(xié)程來(lái) 處理每個(gè) 請(qǐng)求 $requestTask = new RequestTask($request, $swooleResponse, $this->context, $this->middleWareManager); $coroutine = $requestTask->run(); $this->task = new Task($coroutine, $this->context); $this->task->run(); clear_ob(); // .. }分析 RequestTask
vendor/zanphp/http-server/src/RequestTask.php
class RequestTask { public function run() { yield $this->doRun(); } public function doRun() { // 處理 中間件 邏輯 $response = (yield $this->middleWareManager->executeFilters()); if (null !== $response) { $this->context->set("response", $response); /** @var ResponseTrait $response */ yield $response->sendBy($this->swooleResponse); $this->context->getEvent()->fire($this->context->get("request_end_event_name")); return; } // 處理 中間件 放行后的 邏輯 $dispatcher = Di::make(Dispatcher::class); $response = (yield $dispatcher->dispatch($this->request, $this->context)); if (null === $response) { $code = BaseResponse::HTTP_INTERNAL_SERVER_ERROR; $response = new InternalErrorResponse("網(wǎng)絡(luò)錯(cuò)誤($code)", $code); } yield $this->middleWareManager->executePostFilters($response); $this->context->set("response", $response); yield $response->sendBy($this->swooleResponse); $this->context->getEvent()->fire($this->context->get("request_end_event_name")); clear_ob(); } }分析 Dispatcher
vendor/zanphp/http-server/src/Dispatcher.php
get("controller_name"); $action = $context->get("action_name"); $args = $context->get("action_args"); if ($args == null) { $args = []; } if ($controllerName === "/" && is_callable($action)) { yield $action(...array_values($args)); } else { $controller = $this->getControllerClass($controllerName); if(!class_exists($controller)) { // 這些錯(cuò) 常見(jiàn)吧 throw new PageNotFoundException("controller:{$controller} not found"); } $controller = new $controller($request, $context); if(!is_callable([$controller, $action])) { // 這些錯(cuò) 常見(jiàn)吧 throw new PageNotFoundException("action:{$action} is not callable in controller:" . get_class($controller)); } yield $controller->$action(...array_values($args)); } } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/26067.html
摘要:中的容器容器介紹容器中獲取一個(gè)類(lèi)的實(shí)例容器中注冊(cè)于獲取類(lèi)的單例函數(shù)理解面向接口開(kāi)發(fā)會(huì)幫助你更好的理解容器類(lèi)容器幫助函數(shù)獲取類(lèi)的實(shí)例注冊(cè)類(lèi)的單例占位有待補(bǔ)充 PHP協(xié)程與yield 我說(shuō)不如你查閱相關(guān)文檔與資料 Iterator(迭代器)接口 生成器總覽在PHP中使用協(xié)程實(shí)現(xiàn)多任務(wù)調(diào)度 當(dāng)然 如果你暫時(shí) 懶的話 yield 當(dāng)成 return 關(guān)鍵字就行 zanphp中的命名空間 Za...
前言 本系列源碼解讀已 http-demo 項(xiàng)目為例 目錄說(shuō)明 showImg(https://segmentfault.com/img/bVX8wy?w=452&h=431); 主要關(guān)心 圖片箭頭指向目錄http://zanphpdoc.zanphp.io/we... bin: 服務(wù)啟動(dòng)bin文件目錄 init: 應(yīng)用初始化相關(guān) resource: 配置文件目錄,具體配置見(jiàn) 項(xiàng)目配置 src...
摘要:前言因?yàn)楸鞠盗兄饕庾x源碼,所以環(huán)境采用作者自己搭建的適用系列的環(huán)境。 前言 因?yàn)楸鞠盗兄饕庾xzanphp源碼, 所以環(huán)境采用作者自己搭建的適用 zan 系列的 docker 環(huán)境。 https://github.com/cjeruen/zan-docker 環(huán)境相關(guān)說(shuō)明 本系列基礎(chǔ)目錄都在 ~/zan-code 目錄下進(jìn)行 如有變更 自行 切換目錄 安裝 docker 與 co...
摘要:前言當(dāng)然從我們熟悉但不完全熟悉的說(shuō)起。下面是中的具體邏輯了。這里采用的是的方式。 前言 當(dāng)然從我們熟悉(但不完全熟悉)的 MVC 說(shuō)起。簡(jiǎn)(zhi)單(jie)的描述. 1. MVC 概覽 1.1. URL 規(guī)則 上篇 目錄說(shuō)明中 提到的,這里不多說(shuō) 規(guī)則就是這樣,后面來(lái)說(shuō)其源碼 1.2. Controller && Action src/Index/IndexController.p...
摘要:獲取應(yīng)用并啟動(dòng)分析設(shè)置應(yīng)用名稱(chēng)獲取本身實(shí)例想容器注冊(cè)單例設(shè)置應(yīng)用基礎(chǔ)路徑其他初始化工作初始化容器其他初始化工作創(chuàng)建根據(jù)前面的知識(shí)掃盲可知道返回的真身是位于分析繼承這里就把中的函數(shù)都放在分析了服務(wù)的啟動(dòng)主入口函 獲取應(yīng)用并啟動(dòng) php bin/httpd
閱讀 2000·2021-09-13 10:23
閱讀 2332·2021-09-02 09:47
閱讀 3792·2021-08-16 11:01
閱讀 1214·2021-07-25 21:37
閱讀 1597·2019-08-30 15:56
閱讀 522·2019-08-30 13:52
閱讀 3127·2019-08-26 10:17
閱讀 2442·2019-08-23 18:17