框架啟動流程
一、自動加載
我們在執行如下命令的時候:
php easyswoole.php server start
項目目錄下的 easyswoole
這個文件,會搜索項目目錄下是否存在 composer
所生成的 autoload.php
這個文件,用于實現 psr-4
自動加載,當文件不存在的時候,則終止框架啟動。
二、基礎常量定義
在搜索到了 autoload.php
文件后,框架啟動腳本則會認定為已經成功注冊了 composer
的自動加載機制,隨后,會根據autoload.php
所在的位置,進行如下幾個常量的預定義。
-
IN_PHAR
定義規則為
defined('IN_PHAR') or define('IN_PHAR', boolval(\Phar::running(false)));
,該常量可以用于判定當前服務是否在PHAR
環境中。 -
RUNNING_ROOT
定義規則為
defined('RUNNING_ROOT') or define('RUNNING_ROOT', $realCwd);
,該常量可以用于定義當前服務運行的根目錄,是一個絕對路徑。 -
EASYSWOOLE_ROOT
定義規則為
defined('EASYSWOOLE_ROOT') or define('EASYSWOOLE_ROOT', IN_PHAR ? \Phar::running() : $realCwd);
,該常量用于定義當前項目所在路徑的根目錄,是一個絕對路徑。
三、bootstrap 文件引入
EasySwoole
啟動腳本會判斷在項目根目錄下,也就是 EASYSWOOLE_ROOT.'/bootstrap.php'
這個文件是否存在,如果存在,那么則會執行一次 require_once
。用戶可以在框架沒有做任何的真實初始化之前,做自己的預處理或者是預定義。(注:3.4.x及以上版本在框架安裝時會自動生成一個 bootstrap
文件在項目根目錄,3.4.x 之前的版本需要用戶自行添加。)
四、啟動命令解析
EasySwoole
主框架定義了一個命令容器,完整命名空間為 \EasySwoole\EasySwoole\Command\CommandRunner
,這個是一個單例對象,是對 \EasySwoole\Command\CommandManager
對象的進一步調用封裝。在對象的構造函數中,默認注冊了 EasySwoole
自帶的幾個命令:
- Crontab
- Install
- PhpUnit
- Process
- Server
- Task
以如下啟動命令為例:
php easyswoole.php server start -d
-d 可選,為守護啟動參數
CommandRunner
會執行 server
命令的 start
行為,其中,server
命令的完整實現在 \EasySwoole\EasySwoole\Command\DefaultCommand\Server
。
Server 主命令
server
主命令被執行時,做了以下操作:
- 判斷是否指定了運行模式
$mode = CommandManager::getInstance()->getOpt('mode'); if(!empty($mode)){ Core::getInstance()->runMode($mode); }
- 執行框架的初始化
\EasySwoole\EasySwoole\Core::getInstance()->initialize()
Start 行為
在 start
行為中,做了如下兩件事:
- 獲取配置對象并設置運行時必須參數
- 執行框架的最終啟動
\EasySwoole\EasySwoole\Core::getInstance()->createServer()->start();