hyperf 的事件机制可以用来解耦 主要有三种对象, 事件, 事件监听器, 和事件调度器来 协助完成一个事件的处理 传送门
事件: 它的作用就是一个封装的对象, 而这个对象的作用, 就是在 代码中和事件监听器之间来传送参数的, 也可以说它就是一个传送数据的载体, 没有什么实质性的功能 监听器: 用来监听事件对象 (通过 listen方法来注册事件, 通过 process 方法来处理事件) 事件调度器: 用来触发事件 和 管理 监听器 与 事件之间的关系
实际代码 比如, 我们在代码中注册了一个用户, 用户注册完成后要给用记发信短信 , 就可以使用事件
首先我们要composer 事件的包 composer require hyperf/event
1.接下来我们就要来定义一个事件 比如 RegisterEvent 我们说了, 事件就好像是一个 用来传递参数的 包装对象, 就好像 java中的 pojo , vo 对象一样, 只是一个载体, 所以, 事件对象不需要 继承任何一个类
2. 定义一个事件的监听器, 监听器都需要实现一下 Hyperf\Event\Contract\ListenerInterface 接口的约束方法 监听器要加上 @listener 的注解, 才可以正常使用 另一种方法是 不使用注解, 使用 配置方件 也就是在 config/autoload 文件夹下的 listeners.php
- 有了监听器和 事件, 我们就可以在我们需要使用的地方触发了 事件调度器(EventDispatcher)
上面的代码中, 关于同步问题, 我还在研究, 一种想法是 使用 co() 协程的方法解决, 另一种方法, 是使用 swoole 的 taskworker 来处理, 后面再来完成. 这里只讲 事件的使用
|