(本文适用于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 可复用的应用框架(序)

转载于:https://www.cnblogs.com/zhuweisky/archive/2006/06/06/418461.html

ESFramework介绍之(34)―― ITcpServerAgent和IUdpServerAgent组件关系图相关推荐

  1. ESFramework介绍之(28)―― Udp组件

        ESFramework对Tcp和Udp协议都提供了完整的支持,在ESFramework介绍之(21)-- Tcp组件接口ITcp介绍 和 ESFramework介绍之(23)―― AgileT ...

  2. WebStorm生成Vue的组件关系图

    快捷键:Ctrl+Alt+U

  3. ESFramework介绍之(16)―― Tcp数据自动发送器ITcpAutoSender

    我们已经积累了这样的经验:如果有一个大块的数据需要通过Tcp发送,我们会采用异步的方式以避免当前工作线程阻塞.那么,如果我们有多个线程需要同时发送大块的数据了?每个线程都在NetworkStream或 ...

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

        这是一篇迟到了很久的文章,要不是今天看到Mediar朋友写的"基于ESFramewok的 客户端和客户端通迅"的文章,我也许还不会想起写这篇应该很早就发表的Blog,它可以 ...

  5. ESFramework介绍之(30)―― 消息侦察者 INetMessageSpy

        (本文适用于ESFramework V0.2+) 现在我们回想一下,当网络组件(Tcp/Udp组件)接收到一个消息后,这个消息会流经哪些组件,然后再通过网络组件发送出去了.如果你研究过ESFr ...

  6. ESFramework介绍之(23)―― AgileTcp

    前面已经介绍了ITcp接口,而AgileTcp就是ESFramework给出的ITcp的参考实现.在之前,我曾经讲解过模拟完成端口的Tcp组件实现和异步Tcp组件实现,在它们的基础之上,我更改了处理策 ...

  7. ESFramework介绍之(14)-- AS与FS通信方案

    前面我们已经多次提到,每个AS都有一组FS为之服务(回顾),AS将接收到的功能请求通过Tcp连接池 或Remoting转发给某个FS处理.下面我们将深入讨论AS和FS之间的通信机制. 首先要解决第一个 ...

  8. 转:ECharts图表组件之简单关系图:如何轻松实现另类站点地图且扩展节点属性实现点击节点页面跳转...

    站点地图不外乎就是罗列一个网站的层次结构,提炼地讲就是一个关系结构图.那么我们如何巧用ECharts图表组件内的简单关系结构图来实现一个站点的地图结构呢?另外如何点击某个节点的时候实现页面跳转呢? 针 ...

  9. 分治法——棋盘覆盖问题/L形组件填图问题(Java实现)

    问题描述 设B是一个n×n棋盘,n=2k,(k=1,2,3,-).用分治法设计一个算法,使得:用若干个L型条块可以覆盖住B的除一个特殊方格外的所有方格.其中,一个L型条块可以覆盖3个方格.且任意两个L ...

最新文章

  1. 超级的全中文语音数据集合
  2. 欢迎使用CSDN-markdown编辑器保存
  3. java8 注解: @FunctionalInterface (函数式接口)
  4. rocketmq下单支付场景
  5. html判断安装没安装qq,QQ提示安装路径无效您没有权限怎么办 QQ2015提示安装路径无效您没有权限的解决方法...
  6. NNDL 实验三 线性回归
  7. roberts算子实现
  8. 逍遥安卓模拟器android,逍遥安卓模拟器
  9. js实现图片放大镜效果——简单方法
  10. Java语言之Integer类
  11. node-sass 安装失败,原因总结
  12. 中移动分布式存储超级大单出炉,浪潮等唱主角
  13. php后端管,管理后台-后端-PHP篇
  14. rotation的单位是角度
  15. 如把联想电脑计算机图标放在桌面上,桌面无“我的电脑”图标
  16. 如何在Android中发送电子邮件
  17. Linux下文件的备份
  18. java 将.amr音频文件转换为.mp3或.wav文件
  19. 【R语言】ggplot2---散点图的边框和颜色填充问题
  20. UMLChina建模竞赛第3赛季第4轮:“答题抽奖”建模

热门文章

  1. 有些人总是在进步,因为他随时懂得回溯、调试、纠错,进而提升自己
  2. 如何将常规元组或字典转换为 namedtuple
  3. 手机上的星号键和井号键有什么用?
  4. Qt——P7 对象树
  5. cte公用表表达式_SQL Server中的CTE; 使用公用表表达式解决重新编制标识符列的问题
  6. sql注入利用_SQL注入:这是什么? 原因和利用
  7. azure云数据库_Azure Data Studio中Windows的数据库管理工具扩展
  8. SQL JOIN TABLES:在SQL Server中使用查询
  9. 【C#复习总结】细说表达式树
  10. 转:Java多线程学习(吐血超详细总结)