(本文适用于ESFramework V0.3+)
在ESFramework介绍之(7)-- 服务器代理IServerAgent(2006.06.06修正) 的介绍中,我们已经认识了IServerAgent的职责与作用,并且知道了 ITcpServerAgent和IUdpServerAgent是分别使用于Tcp和Udp的ServerAgent。但是它们与其它组件(比如通信组件、消息处理器、处理器工厂)之间的联系是怎样的,前文讲的还不清楚,所以这里增加一篇文章,把这个关系理顺。下面分别是ITcpServerAgent和IUdpServerAgent的组件关系图:
上面两个图非常清晰的描述了组件间的依赖关系和消息的流向。
注意,上面的ITcpServerAgent和IUdpServerAgent两个组件关系图中右边的部分是完全相同的,它们都是由IServerAgentHelper帮助构建。红线代表将消息发送出去,黑线代表对接收的消息的处理流程。可以看到ITcpServerAgent和IUdpServerAgent都是从IResponseManager提取回复消息,以此才可能将异步的消息请求/回复转化为同步的“方法调用”。
关于IUdpServerAgent,还有一个地方需要注意,我们在客户端和服务端都使用相同的Udp网络组件--IEsbUdp(可复用性是ESFramework发展过程中一直坚守的目标),只不过服务端为IEsbUdp装配的消息分派器IMessageDispatcher复杂些。
在这两个组件关系图中,除了ISingleMessageDealer需要我们自己实现以外,其它的所有组件,ESFramework都提供了参考实现,可以直接使用。
最后,引出一个问题,那就是当客户端使用了点对点的通信时,如果客户A和客户B之间能直接通信,那么A和B之间的P2PMessage就不需要经过服务器转发,即不需要提交给IServerAgent,而是交给IP2PChannel发送;如果客户A和客户B之间不能直接通信,那么A和B之间的P2PMessage就需要经过服务器转发。为了对上层应用屏蔽P2PMessage是通过服务器转发器的还是通过IP2PChannel直接发送的,ESFramework引入了IMessageTransceiver,它的智能在于,如果P2PMessage可以通过IP2PChannel直接发送,则将其交给IP2PChannel,否则将其提交给IServerAgent由服务器转发。这样应用只需要直接使用IMessageTransceiver提交(发送)消息就可以了,而不用关心下层的消息路由途径。关于IMessageTransceiver和IP2PChannel的更多信息将在下文中介绍。
感谢关注!
上篇文章:ESFramework介绍之(33)―― AS与FS通信实现及相关
转到 :ESFramework 可复用的应用框架(序)