# EventDispatcher
事件派发,框架基础,用于事件的传递。
## Event
Event是描述一个事件。
* type 事件类型
* data 事件内容
* fromInfo 消息来源方资料
* toInfo 消息接收方资料
* progress 派发的进度
我们通过new Event($type,$data)创建一个Event对象,额外方法:
* getType() 获取类型
* getData() 获取内容
* getProcessId() 获取来源方的进程id
* getFromInfo($type) 获取来源方的资料
* setFromInfo($type,$data) 设置来源方资料
* getToInfo($type) 获取接收方资料
* setToInfo($type,$data) 设置接收方资料
* getProgress() 获取进度
* setProgress($progress) 设置进度
## EventDispatcher
消息派发器
* addEventDispatcher(AbstractEventDispatcher $eventDispatcher) 添加一个派发器类型
* getEventDispatcher(string $name): ?AbstractEventDispatcher 获取一个派发器类型
* listen($type, ?EventCall $eventCall = null, $once = false): EventCall 监听事件返回EventCall ,once代表是否只是一次监听
* remove($type, EventCall $eventCall) 移除某个类型的某个监听
* removeAll($type = null) 移除某个类型的所有监听
* dispatchEvent(Event $event) 派发事件,只在本进程
* dispatchProcessEvent(Event $event, Process ... $toProcess) 向某些进程派发事件
* dispatchProcessIdEvent(Event $event, $toProcessIds) 向某些进程派发事件
* getEventCalls($type): ?array 获取某个类型的所有EventCall
项目中默认注册了2种事件派发器,一是TypeEventDispatcher,另一个是ProcessEventDispatcher,派发器之间有严格的传递关系,传递进度会在Event中的progress表现出来,此外Event的toInfo对象决定使用哪种派发器。处理过程大概如下:
>事件生成过程
用户调用setToInfo设置接收方资料
事件准备过程
TypeEventDispatcher调用setFromInfo写入来源信息
ProcessEventDispatcher调用setFromInfo写入来源信息
事件派发过程
ProcessEventDispatcher调用setToInfo读取接受方信息 调用setProgress设置进度
TypeEventDispatcher调用setToInfo读取接受方信息 调用setProgress设置进度
## EventCall
* call(callable $fuc) 一般通过这个方法接收事件
* wait($timeout = 5) 堵塞的接收事件
## 例子
获取事件派发器
~~~
$eventDispatcher = Server::$instance->getEventDispatcher();
~~~
发出一个事件
~~~
$eventDispatcher->dispatchEvent(new ConfigChangeEvent());
~~~
监听事件
~~~
$call = $eventDispatcher->listen(ConfigChangeEvent::ConfigChangeEvent);
$call->call(function (ConfigChangeEvent $result) {
});
~~~
- 前言
- 捐赠ESD项目
- 使用篇-通用
- 环境
- 安装
- 规范
- 压力测试
- 配置
- 如何设置YML配置
- server配置
- 端口配置
- 项目结构
- 事件派发
- 日志
- 注解
- DI容器
- 自定义进程
- 并发及协程池
- Console插件
- Scheduled插件
- Redis插件
- AOP插件
- Saber插件
- Mysql插件
- mysql事务
- Actuator插件
- Whoops插件
- Cache插件
- PHPUnit插件
- Security插件
- Session插件
- EasyRoute插件
- http路由
- ProcessRpc插件
- AutoReload插件
- AnnotationsScan插件
- Tracing-plugin插件
- MQTT插件
- Pack插件
- AMQP插件
- Validate插件
- Uid插件
- Topic插件
- Blade插件
- CsvReader插件
- hashed-wheel-timer-plugin插件
- 使用篇-HTTP
- 路由
- 静态文件
- 路由定义
- 修饰方法
- 路由分组
- 资源路由
- 端口作用域
- 异常处理
- 跨域请求
- 路由缓存
- 控制器
- 控制器初始化
- 前置操作
- 跳转和重定向
- 异常处理
- 请求
- 请求对象
- 请求信息
- request消息
- response消息
- stream消息
- url接口
- 验证器
- 内置验证器
- 内置过滤器
- 使用篇-WS
- 如何使用
- 路由
- 使用篇-TCP
- 插件篇-PluginSystem
- 微服务篇-ESDCloud
- CircuitBreaker插件
- SaberCloud插件
- 分布式链路追踪系统
- Consul插件