ESFramework网络通信框架介绍之(3)――消息处理器和处理器工厂
一。ESFramework網(wǎng)絡(luò)通信框架與消息處理器?
?無(wú)論是服務(wù)端還是客戶端,都需要對(duì)接收到的消息進(jìn)行處理,在ESFramework網(wǎng)絡(luò)通信框架中,處理消息的組件稱為消息處理器,所有的消息處理器都實(shí)現(xiàn)了接口IDataDealer:
???
2?????{????????
3?????????NetMessage??DealRequestMessage(NetMessage?reqMsg)?;????????
4?????}????
???
??? 從DealRequestMessage方法的簽名我們可以看到,將NetMessage的主體(是字節(jié)流)解析為IContract對(duì)象是由消息處理器自己完成的。這也是很符合實(shí)際的,消息處理器一定能解析并處理它關(guān)心的消息,而框架和應(yīng)用的其它部分不必關(guān)心。這里小結(jié)一下,最開(kāi)始我們把消息解析的任務(wù)從框架下放到了應(yīng)用,這里,我們又把這個(gè)任務(wù)繼續(xù)下放給了消息處理器。這樣,各個(gè)消息處理器只用解析自己關(guān)心的消息了,在此基礎(chǔ)上,我們就可以把消息處理器做成插件(Addin)的形式,并實(shí)現(xiàn)插件的動(dòng)態(tài)加載功能。
??? 現(xiàn)在我們來(lái)看看消息處理器插件(又稱“功能插件”)?
???
????///?IFunAddin?功能插件基礎(chǔ)接口。
????///?</summary>
????public?interface?IFunAddin?:IAddin?,IDataDealer
????{
????????
????}
????
IAddin是插件的基礎(chǔ)接口,在企業(yè)級(jí)服務(wù)器設(shè)計(jì)與實(shí)現(xiàn)經(jīng)驗(yàn)之插件系統(tǒng)基礎(chǔ)篇 一文中已經(jīng)作了簡(jiǎn)單介紹。
???? 針對(duì)各種不同類型的消息(消息類型的不同體現(xiàn)為本條消息的Header中的ServiceKey不同),需要由不同的消息處理器來(lái)處理,管理/創(chuàng)建所有這些消息處理器的工廠,稱為處理器工廠IDataDealerFactory。
????{
????????IDataDealer?CreateDealer(int?requestType?,int?serverTypeKey)??;//serverTypeKey?比如城市代號(hào)????????
????}
?
??? IDataDealerFactory根據(jù)消息的類型,創(chuàng)建對(duì)應(yīng)的處理器。CreateDealer方法中的第二個(gè)參數(shù)serverTypeKey暫時(shí)可不予關(guān)心。
??? 前面我們已經(jīng)提到了使用插件來(lái)實(shí)現(xiàn)消息處理器,那么ESFramework框架就可以提供一個(gè)基于插件的處理器工廠FunAddinDealerFactory,這個(gè)工廠的實(shí)現(xiàn)需要借助插件管理器IAddinManagement,關(guān)于插件管理器,可參見(jiàn)企業(yè)級(jí)服務(wù)器設(shè)計(jì)與實(shí)現(xiàn)經(jīng)驗(yàn)之插件系統(tǒng)基礎(chǔ)篇一文。FunAddinDealerFactory實(shí)現(xiàn)如下:
???
?1???? public?class?FunAddinDealerFactory?:IDataDealerFactory
?2?????{
?3?????????private?IAddinManagement?addinManagement?;
?4?
?5?????????public?FunAddinDealerFactory()
?6?????????{????????????
?7?????????}
?8?
?9?????????#region?property
10?????????public?IAddinManagement?AddinManagement
11?????????{
12?????????????set
13?????????????{
14?????????????????this.addinManagement?=?value?;
15?????????????}
16?????????}
17?????????#endregion
18?
19?????????#region?IDataDealerFactory?成員
20?????????public?IDataDealer?CreateDealer(int?requestType,?int?serverTypeKey)
21?????????{
22?????????????foreach(IAddin?addin?in?this.addinManagement.AddinList)
23?????????????{
24?????????????????if((addin.ServiceKey?==?requestType)?&&?(addin.Enabled))
25?????????????????{
26?????????????????????return?(IDataDealer)addin?;
27?????????????????}
28?????????????}
29?
30?????????????return?null;
31?????????}
32?
33?????????#endregion
34?????}
?
???? 上面講述的是基于插件的處理器工廠,后面的文章中我們還會(huì)給出一個(gè)基于Tcp連接池的處理器工廠:)
??? 有時(shí),應(yīng)用經(jīng)常有這樣的需要,對(duì)某種類型的消息或某個(gè)特定的消息進(jìn)行攔截、截獲,然后對(duì)其進(jìn)行某種變形(如壓縮、加密)等,這些功能將通過(guò)Hook機(jī)制實(shí)現(xiàn),Hook機(jī)制到底是如何發(fā)生作用的,請(qǐng)繼續(xù)關(guān)注下文?
ESFramework網(wǎng)絡(luò)通信框架介紹之(4)―消息攔截器INetMessageHook
?
上一篇:ESFramework介紹之(2)――網(wǎng)絡(luò)通信消息NetMessage
轉(zhuǎn)到??:ESFramework 可復(fù)用的(序)?
?
版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的ESFramework网络通信框架介绍之(3)――消息处理器和处理器工厂的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: RDLC报表(八)
- 下一篇: .NET Pet Shop 4.0案例研