這是一篇遲到了很久的文章,要不是今天看到Mediar朋友寫的“基於ESFramewok的 用戶端和用戶端通迅”的文章,我也許還不會想起寫這篇應該很早就發表的Blog,它可以協助ESFramework的研究者/使用者們更好的使用ESFramework。Mediar朋友的那篇文章中介紹了通過伺服器轉寄P2PMessage,Mediar手動實現了一個自己的處理器,實際上ESFramework已經內建了P2PMessage的處理器,那就是P2PMessageDealer,P2PMessageDealer不僅可以把訊息轉寄給串連到同一個AS上的好友,而且可以轉寄給串連到異地AS上的好友。不管怎樣,還是要感謝Mediar為我們提供的樣本!
到目前為止,ESFramework將接收自終端使用者的訊息分為6類,這可以通過ServiceType枚舉看出來: public enum ServiceType
{
Basic , //IBasicRequestDealer
Function ,
P2PMessage , //對於P2P訊息,伺服器僅僅轉寄,P2PMessageDealer
FriendRelation , //如好友名單、好友資料等 ,FriendRelationDealer
GroupMessage , //如多人連網遊戲中的同步訊息等(動態組訊息) -- ActiveGroupMessageDealer
CustomServiceType //自訂服務種類
}
我先解釋一下這幾種類型的訊息含義:
(1)Basic,基本訊息是類似這樣的訊息,比如登入、退出、check訊息等。
(2)Function,功能請求訊息是所有請求功能服務的訊息,這樣的請求訊息都有對應的回複訊息,比如查詢、要求伺服器計算而得到結果等等。ESFramework中,幾乎所有的Function類型的訊息都是由功能外掛程式處理的。
(3)P2PMessage,點對點訊息,是指使用者發給另一使用者而經過伺服器中轉的訊息,比如即時通訊中的聊天訊息等。
(4)FriendRelation,好友關係請求訊息,比如請求好友名單、好友資料等,這在很多IM應用中是常見的。
(5)GroupMessage,動態組請求訊息。ESFramework支援運行時動態組建立、管理等。
(6)CustomServiceType ,自訂的訊息類型,即你的應用中用到的除上面5種訊息類型以外的訊息。
(7)還要補充一種訊息,跨地區(AS)請求,這種類型的訊息將被本地AS轉寄到目標AS去處理。(回顧跨地區AS)
ESFramework為每種類型的訊息都提供了預設的處理器(或處理器介面),它們是:
(1)對於Basic訊息類型,ESFramework提供了IBasicRequestDealer介面,你的應用只要實現此介面就可處理所有的Basic訊息。
(2)對於Function類型的訊息,由於通常是由功能外掛程式處理,所以ESFramework提供了FunAddinDealerFactory來處理所有的功能請求訊息。
(3)P2PMessage,對於所有要轉寄的訊息,ESFramework提供了P2PMessageDealer,P2PMessageDealer可以進行本地區轉寄和跨地區(AS)轉寄。如果需要將轉寄失敗的訊息儲存以待以後重試,可以使用IOverdueMessageHandler。
(4)FriendRelation,對於好友關係請求,ESFramework提供了FriendRelationDealer處理器,你只需要實現該處理器使用到的其它組件介面即可。
(5)GroupMessage,對於動態組請求訊息,ESFramework提供了ActiveGroupMessageDealer可以直接進行處理。
(6)CustomServiceType ,對於應用自訂的訊息類型,你需要實現自己的訊息處理器。
(7)對於跨地區(AS)請求,你可以根據AS之間的通訊方式實現特定的處理器。如果AS之間採用.net remoting通訊,則ESFramework提供了ESFramework.Architecture.FourTier.ForeignDealer來處理跨地區請求。
所有上述的訊息處理器都可以裝配到EsbRequestDealerFactory工廠,EsbRequestDealerFactory為每種類型的訊息都預留了處理器插槽,你可以通過對應的屬性進行處理器注入!圖示如下:
(圖中黃色背景的組件都已經在ESFramework中提供了實現!BasicRequestDealer需要你實現IBasicRequestDealer介面)
如果你的應用只需要使用其中幾種類型的訊息,那麼只需要為EsbRequestDealerFactory裝配對應的訊息處理器,這樣不會為不使用的訊息類型付出任何額外的代價。
上一篇文章:ESFramework介紹之(30)―― 訊息偵察者 INetMessageSpy
轉到 :ESFramework 可複用的通訊架構(序)