獲取應用並啟動
php bin/httpd
<?php
#!/usr/bin/env php
<?php
/** @var anFrameworkFoundationApplication $app */
$app = require_once __DIR__.`/../init/app.php`;
$server = $app->createHttpServer();
$server->start();
init/app.php
<?php
use ZanFrameworkFoundationApplication;
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.php
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
*
* 根據 前面 的知識掃盲 可知道 返回的 真身 是 ZanPHPHttpServerServer
* 位於 vendor/zanphp/http-server/src/Server.php
* @return anFrameworkNetworkHttpServer
*/
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
/*
* 繼承 ZanPHPServerBaseServerBase
* 這裡 就 把 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);
}
}