# EventDispatcher 消息分发器 ```php /** * 事件处理 */ public function http_getEvent() { $data = yield EventDispatcher::getInstance()->addOnceCoroutine('unlock')->setTimeout(25000); //这里会等待事件到达,或者超时 $this->http_output->end($data); } public function http_sendEvent() { EventDispatcher::getInstance()->dispatch('unlock', 'hello block'); $this->http_output->end('ok'); } ``` 上述代码getEvent描述的是等待事件的到达,事件超时时间为25s。 sendEvent代表是一个事件的派发。 访问getEvent游览器会一直等待25s直到超时,期间如果访问sendEvent那么getEvent接口会立即返回'hello block'。 ## addOnceCoroutine ``` function addOnceCoroutine($eventType) ``` 协程的方式等待一次事件,事件到达自动清除事件的监听。 ## dispatch 发送一次事件,支持集群模式。发送的data会自动序列化。 ``` function dispatch($type, $data = null, $onlyMyWorker = false, $fromDispatch = false) ``` onlyMyWorker为true代表只在本进程派发事件。 fromDispatch请保持一直为false。 ## randomDispatch ``` function randomDispatch($type, $data = null) ``` 随机选取一个进程派发,只支持本地,不支持集群。 ## add ``` function add($type, $listener) ``` 回调的方式监听一个事件,用次方式不会自动清除事件的关联,会永久的监听这个事件。 ## remove ``` function remove($type, $listener) ``` 移除一个事件的监听 ## removeAll ``` function removeAll($type = null) ``` 移除这个类型的所有事件 # 应用场景 事件的应用场景非常灵活,可以实现高性能业务毫秒定时器,可以实现高性能堵塞方式的http请求。