#### 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采集进程服务