ESFramework介绍之(31)―― 消息分类及对应的处理器

    这是一篇迟到了很久的文章,要不是今天看到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 可复用的通信框架(序) 

posted @ 2006-05-18 10:46  zhuweisky  阅读(2764)  评论(1编辑  收藏  举报