#### 1、超全局管理-Swoolefy\Core\Swfy類
這個是參考了Yii2的設計思想,實現全局注冊樹模式,將一些全局服務函數,變量保存在類文件的靜態變量中,實現在每個worker|task進程中都存在完整的而且相同的上下文。
在swoolefy中,Swoolefy\Core\Swfy類作為超全局管理的類
~~~
class Swfy extends \Swoolefy\Core\BaseObject {
use \Swoolefy\Core\ServiceTrait;
/**
* $server swoole服務超全局變量
* @var null
*/
public static $server = null;
/**
* $config swoole服務對應協議層的配置
* @var null
*/
public static $config = [];
/**
* $appConfig 應用層的配置
* @var null
*/
public static $appConfig = [];
/**
* $com_alias_name 動態創建組件對象
* @param string $com_alias_name
* @param array $defination
* @return void
*/
public static function createComponent(string $com_alias_name, array $defination = []) {
return Application::getApp()->creatObject($com_alias_name, $defination);
}
/**
* removeComponent 銷毀Component
* @param string|array $com_alias_name
* @return void
*/
public static function removeComponent($com_alias_name = null) {
return Application::getApp()->clearComponent($com_alias_name);
}
/**
* getComponent 獲取組件
* @param string $com_alias_name
* @return void
*/
public static function getComponent(string $com_alias_name = null) {
return Application::getApp()->getComponents($com_alias_name);
}
~~~
* trait使用
use \Swoolefy\Core\ComponentTrait, \Swoolefy\Core\ServiceTrait;
這說明Swoolefy將能使用這兩個trait文件定義的函數和屬性,具體可以查看文件
* $server
swoole底層的服務server(例如http的\Swoole\Http\Server)
一般通過Swfy::getServer()獲取,可以在任何地方使用
* $config
服務協議層配置,通過Swfy::getConf()獲取,可以在任何地方使用
* appConfig
服務應用層配置,通過Swfy::getAppConf()獲取,可以在任何地方使用(除了自定義進程中)
* createComponent()
動態創建一個組件實例,例如創建一個視圖組件實例,支持兩種方式,推薦使用閉包回調的方式,這樣更加靈活,只需返回組件對象即可
~~~
// 配置模式
$view1 = Swfy:: createComponent('view1',['class'=>'Swoolefy\Core\View'])
// 閉包回調模式
$view2 = Swfy::createComponent('view2', function($name) {
return new Swoolefy\Core\View();
})
~~~
#### 2、超全局管理-Swoolefy\Core\Application類
Application類其實很簡單,主要是做一些全局管理
~~~
<?php
namespace Swoolefy\Core;
class Application {
/**
* $app 應用對象
* @var null
*/
public static $app = null;
/**
* $dump 記錄啟動時的調試打印信息
* @var null
*/
public static $dump = null;
/**
* __construct
*/
public function __construct() {
}
/**
* __destruct
*/
public function __destruct() {
}
}
~~~
我們在Controller或者mode或者其他類中編碼時,可以直接調用
~~~
Application::getApp()
其實這個主要的用法是用來獲取組件的,例如獲取log組件實例,view實例
~~~
$log = Application::getApp()->log;
$view = Application::getApp()->view;
~~~
log,view這些組件名與在應用層配置文件components的定義的key一致,那么即可獲取到這個組件實例
那么為什么這樣子可以獲取組件呢,其實就是__get的魔術方法實現,原理就是當app應用實例找不到這個屬性時,就會到Di容器中找,因為組件實例都是寄存在這Di容器中,這個其實與Yii::$app相似。
具體需要了解,可以參考[https://github.com/bingcool/swoolefy/blob/master/score/Core/ComponentTrait.php](https://github.com/bingcool/swoolefy/blob/master/score/Core/ComponentTrait.php)
- 歡迎使用swoolefy
- 環境說明
- 開發部署
- 安裝
- 創建應用
- 啟動|停止服務
- nginx代理
- 創建Controller
- 應用結構
- App應用對象
- Event請求處理
- 超全局管理
- 熱更新
- inotify實現worker進程熱重啟
- http服務
- 應用層配置
- 協議層配置
- 路由規則
- 控制器
- 數據模型
- websocket服務
- 應用層配置
- 協議層配置
- 數據封裝格式
- 控制器
- 數據模型
- 二進制數據處理
- rpc服務
- 應用層配置
- 協議程配置
- 數據包協議格式
- 服務控制器
- 服務數據模型
- udp服務
- 應用層配置
- 協議層配置
- 數據包封裝格式
- 控制器
- 存在問題
- 常用組件
- log
- view
- session
- cache(redis)
- db(mysql)
- mongodb
- 其他服務管理
- 自定義進程管理
- 異步任務管理
- 內存表管理
- 定時器管理
- 異常捕捉處理
- 進程池管理
- systerm采集進程服務