zanphp源碼解讀 - 應用的啓動

獲取應用並啓動

php bin/httpdphp

<?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;

分析 Application

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;
    }

分析 Server.php

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);
    }
}
相關文章
相關標籤/搜索