php bin/httpd
php
<?php #!/usr/bin/env php <?php /** @var \Zan\Framework\Foundation\Application $app */ $app = require_once __DIR__.'/../init/app.php'; $server = $app->createHttpServer(); $server->start();
init/app.phpbootstrap
<?php use Zan\Framework\Foundation\Application; require __DIR__ . '/../vendor/autoload.php'; $appName = 'http-demo'; $rootPath = realpath(__DIR__.'/../'); $app = new Application($appName, $rootPath); return $app;
vendor/zanphp/framework/src/Foundation/Application.phpapp
public function __construct($appName, $basePath) { // 設置應用名稱 $this->appName = $appName; // 獲取 自己實例 static::setInstance($this); // 想容器註冊單例 ZanPHPContainer::getInstance()->instance(ApplicationContract::class, $this); // 設置 應用 基礎路徑 $this->setBasePath($basePath); // 其餘初始化工做 $this->bootstrap(); } protected function bootstrap() { // 初始化 容器 $this->setContainer(); // 其餘初始化工做 foreach ($this->bootstrapItems as $bootstrap) { $this->make($bootstrap)->bootstrap($this); } } /** * get http server. 建立 httpServer * * 根據 前面 的知識掃盲 可知道 返回的 真身 是 ZanPHP\HttpServer\Server * 位於 vendor/zanphp/http-server/src/Server.php * @return \Zan\Framework\Network\Http\Server */ public function createHttpServer() { /** @var Factory $factory */ $factory = make(Factory::class, ["server"]); $server = $factory->createHttpServer(); $this->server = $server; return $server; }
vendor/zanphp/http-server/src/Server.php
vendor/zanphp/server-base/src/ServerBase.php函數
/* * 繼承 ZanPHP\ServerBase\ServerBase * 這裏 就 把 ServerBase 中的 函數 都放在 Server 分析了 */ class Server extends ServerBase { // 服務的啓動主入口函數 // 服務的啓動主入口函數 // 服務的啓動主入口函數 public function start(); // 服務 啓動初始化 包括 自定義的啓動項 配置在 init/ServerStart/.config.php function bootServerStartItem(); // worker 啓動初始化 包括 自定義的啓動項 配置在 init/WorkerStart/.config.php function bootServerStartItem(); // 請求處理函數 public function onRequest(SwooleHttpRequest $httpRequest, SwooleHttpResponse $httpResponse) { // ... /** 請求處理類 後續講解 */ (new RequestHandler())->handle($httpRequest, $httpResponse); } }