事件管道模型
很多人知道事件驱动模式,那么事件管道(Event Pipeline)模式是什么?下面我们一起来探讨
event 的出现是设计为一个对象的状态的改变即就通知对该对象感兴趣的其他对象。
一般产生一个event总是有个发源地,我们可以把这个发源地叫做Event Generators而在java的EventObject interface中其实应该就是指的
source参数。
通常我们事件驱动模式是在一个本机上做,其实这个模式在分布式环境中也可以采用事件驱动模式。从整个模式上看,本地的事件驱动模型(local event)
和远程的事件驱动模型(remote event)没有什么本质区别,但有几点需要注意
1.local event:所有的对象都在本地包括需要通知的对象。
remote event:Event Generators在一段,remote event 有Event Generators产生后通知另外远端的entity。
2.因为有远端那么就涉及到网络通信,因此通常不能保证网络通信一直通畅,所有remote event的模式可能或出现event丢失不能达到对方的情况。
3.local event 在本地,所以往往event很快,相应的处理的反馈也快,因此你会发现本地的event模式通常都类似于http的握手模式,也就是一个event触发
通常就直接通知给所有监听器。
而remote event 是远程event的传送,那么在网络通信其实消耗大量的时间,那么我认为client端多event的发送,server端统一处理一批event可能是节省资源
比较好的方式。
因此我们这里引入Event Pipeline,他是对server端接收到的event进行管理,将event 放入管道进行各自策略的处理。
另外我们把远端的Event Listener叫做Remote Event Listener,其实本质是一样的,只是为了区分。
当许多remote events 在同一个管道的时候,那么我们需要根据不同的需要来定制event的策略,下面列举以下一些策略
a.In-order delivery
events按照某种顺序传递
b. Efficient delivery
多个event 合并为一个event
c. Store and forward
event 暂停在管道中,等待某个条件出现再继续传递
d. Filtering of events
根据条件过滤相应event
e. Grouping of events
多个event 被一个event代替
PipeLine 流程:
Event Generator ---> Event pipeLine -->Event Consumer
其中pipeLine中可以动态地设置一个或者多个策略。