事件管道模型
事件管道模型
很多人知道事件驅(qū)動模式,那么事件管道(Event Pipeline)模式是什么?下面我們一起來探討
event 的出現(xiàn)是設計為一個對象的狀態(tài)的改變即就通知對該對象感興趣的其他對象。
一般產(chǎn)生一個event總是有個發(fā)源地,我們可以把這個發(fā)源地叫做Event Generators而在java的EventObject interface中其實應該就是指的
source參數(shù)。
通常我們事件驅(qū)動模式是在一個本機上做,其實這個模式在分布式環(huán)境中也可以采用事件驅(qū)動模式。從整個模式上看,本地的事件驅(qū)動模型(local event)
和遠程的事件驅(qū)動模型(remote event)沒有什么本質(zhì)區(qū)別,但有幾點需要注意
1.local event:所有的對象都在本地包括需要通知的對象。
remote event:Event Generators在一段,remote event 有Event Generators產(chǎn)生后通知另外遠端的entity。
2.因為有遠端那么就涉及到網(wǎng)絡通信,因此通常不能保證網(wǎng)絡通信一直通暢,所有remote event的模式可能或出現(xiàn)event丟失不能達到對方的情況。
3.local event 在本地,所以往往event很快,相應的處理的反饋也快,因此你會發(fā)現(xiàn)本地的event模式通常都類似于http的握手模式,也就是一個event觸發(fā)
通常就直接通知給所有監(jiān)聽器。
而remote event 是遠程event的傳送,那么在網(wǎng)絡通信其實消耗大量的時間,那么我認為client端多event的發(fā)送,server端統(tǒng)一處理一批event可能是節(jié)省資源
比較好的方式。
因此我們這里引入Event Pipeline,他是對server端接收到的event進行管理,將event 放入管道進行各自策略的處理。
另外我們把遠端的Event Listener叫做Remote Event Listener,其實本質(zhì)是一樣的,只是為了區(qū)分。
當許多remote events 在同一個管道的時候,那么我們需要根據(jù)不同的需要來定制event的策略,下面列舉以下一些策略
a.In-order delivery
events按照某種順序傳遞
b. Efficient delivery
多個event 合并為一個event
c. Store and forward
event 暫停在管道中,等待某個條件出現(xiàn)再繼續(xù)傳遞
d. Filtering of events
根據(jù)條件過濾相應event
e. Grouping of events
多個event 被一個event代替
PipeLine 流程:
Event Generator ---> Event pipeLine -->Event Consumer
其中pipeLine中可以動態(tài)地設置一個或者多個策略。