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

简介: 这是一篇迟到了很久的文章,要不是今天看到Mediar朋友写的“基于ESFramewok的 客户端和客户端通迅”的文章,我也许还不会想起写这篇应该很早就发表的Blog,它可以帮助ESFramework的研究者/使用者们更好的使用ESFramework。
    这是一篇迟到了很久的文章,要不是今天看到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 可复用的通信框架(序)  

目录
相关文章
|
数据安全/隐私保护
VOS怎样实现平台之间的动态注册和一些小问题?
VOS怎样实现平台之间的动态注册和一些小问题?
|
安全 网络架构
消息(7)——WCF编程模型中控制消息(1)绑定,契约
WCF服务要通过终结点来进行通信,终结点三大构成元素:ABC,其中的B,binding是重中之重,它解决了在消息交换过程中的编码,传输协议,安全等问题。 绑定是分层的,一个绑定对象对应一组有序的绑定元素的集合。
745 0
|
网络协议 数据安全/隐私保护
ESFramework网络通信框架介绍之(3)――消息处理器和处理器工厂
一。ESFramework网络通信框架与消息处理器   无论是服务端还是客户端,都需要对接收到的消息进行处理,在ESFramework网络通信框架中,处理消息的组件称为消息处理器,所有的消息处理器都实现了接口IDataDealer:    1     public interface IDa...
832 0
|
网络协议
ESFramework介绍之(35)―― IMessageTransceiver
(本文适用于ESFramework V0.3+)        在ESFramework介绍之(7)-- 服务器代理IServerAgent 一文中,我们详细的介绍了IServerAgent,我们已经知道,客户端与服务器之间的所有通信都可经过IServerAgent,包括要转发的P2P消息。
907 0
|
网络协议 Java 算法
ESFramework介绍之(23)―― AgileTcp
前面已经介绍了ITcp接口,而AgileTcp就是ESFramework给出的ITcp的参考实现。在之前,我曾经讲解过模拟完成端口的Tcp组件实现和异步Tcp组件实现,在它们的基础之上,我更改了处理策略,而形成了AgileTcp,目的是更清晰的结构、更高的效率。
804 0
|
网络协议 安全
ESFramework网络通信框架介绍之(5)――消息分派器IMessageDispatcher
从2004年7月开始,就一直从事N层C/S架构的服务端的开发,时至今日,慢慢的积累了一些开发经验,ESFramework网络通信框架体系便是这些经验的总结。ESFramework网络通信框架这是一套完全可复用的、灵活的、单纯的、支持N层C/S架构的网络通信框架,内置了对Tcp和Udp协议的支持。
958 0
|
数据安全/隐私保护 网络协议 算法
ESFramework介绍之(4)――消息拦截器INetMessageHook
网络上传输的消息经常是经过加密和压缩,有的特定类型的消息可能还需要进行其它变形,ESFramework通过INetMessageHook对这些功能提供支持。需要说明的是,ESFramework对消息进行截获(Hook)处理有两种方式,一是仅仅Hook处理消息主体(Body),而不对消息头作任何变换;另一种方式是对整个消息(包括消息头和主体)都进行Hook处理。
802 0