ESFramework介绍之(34)―― ITcpServerAgent和IUdpServerAgent组件关系图
在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组件关系图相关推荐
- ESFramework介绍之(28)―― Udp组件
ESFramework对Tcp和Udp协议都提供了完整的支持,在ESFramework介绍之(21)-- Tcp组件接口ITcp介绍 和 ESFramework介绍之(23)―― AgileT ...
- WebStorm生成Vue的组件关系图
快捷键:Ctrl+Alt+U
- ESFramework介绍之(16)―― Tcp数据自动发送器ITcpAutoSender
我们已经积累了这样的经验:如果有一个大块的数据需要通过Tcp发送,我们会采用异步的方式以避免当前工作线程阻塞.那么,如果我们有多个线程需要同时发送大块的数据了?每个线程都在NetworkStream或 ...
- ESFramework介绍之(31)―― 消息分类及对应的处理器
这是一篇迟到了很久的文章,要不是今天看到Mediar朋友写的"基于ESFramewok的 客户端和客户端通迅"的文章,我也许还不会想起写这篇应该很早就发表的Blog,它可以 ...
- ESFramework介绍之(30)―― 消息侦察者 INetMessageSpy
(本文适用于ESFramework V0.2+) 现在我们回想一下,当网络组件(Tcp/Udp组件)接收到一个消息后,这个消息会流经哪些组件,然后再通过网络组件发送出去了.如果你研究过ESFr ...
- ESFramework介绍之(23)―― AgileTcp
前面已经介绍了ITcp接口,而AgileTcp就是ESFramework给出的ITcp的参考实现.在之前,我曾经讲解过模拟完成端口的Tcp组件实现和异步Tcp组件实现,在它们的基础之上,我更改了处理策 ...
- ESFramework介绍之(14)-- AS与FS通信方案
前面我们已经多次提到,每个AS都有一组FS为之服务(回顾),AS将接收到的功能请求通过Tcp连接池 或Remoting转发给某个FS处理.下面我们将深入讨论AS和FS之间的通信机制. 首先要解决第一个 ...
- 转:ECharts图表组件之简单关系图:如何轻松实现另类站点地图且扩展节点属性实现点击节点页面跳转...
站点地图不外乎就是罗列一个网站的层次结构,提炼地讲就是一个关系结构图.那么我们如何巧用ECharts图表组件内的简单关系结构图来实现一个站点的地图结构呢?另外如何点击某个节点的时候实现页面跳转呢? 针 ...
- 分治法——棋盘覆盖问题/L形组件填图问题(Java实现)
问题描述 设B是一个n×n棋盘,n=2k,(k=1,2,3,-).用分治法设计一个算法,使得:用若干个L型条块可以覆盖住B的除一个特殊方格外的所有方格.其中,一个L型条块可以覆盖3个方格.且任意两个L ...
最新文章
- 超级的全中文语音数据集合
- 欢迎使用CSDN-markdown编辑器保存
- java8 注解: @FunctionalInterface (函数式接口)
- rocketmq下单支付场景
- html判断安装没安装qq,QQ提示安装路径无效您没有权限怎么办 QQ2015提示安装路径无效您没有权限的解决方法...
- NNDL 实验三 线性回归
- roberts算子实现
- 逍遥安卓模拟器android,逍遥安卓模拟器
- js实现图片放大镜效果——简单方法
- Java语言之Integer类
- node-sass 安装失败,原因总结
- 中移动分布式存储超级大单出炉,浪潮等唱主角
- php后端管,管理后台-后端-PHP篇
- rotation的单位是角度
- 如把联想电脑计算机图标放在桌面上,桌面无“我的电脑”图标
- 如何在Android中发送电子邮件
- Linux下文件的备份
- java 将.amr音频文件转换为.mp3或.wav文件
- 【R语言】ggplot2---散点图的边框和颜色填充问题
- UMLChina建模竞赛第3赛季第4轮:“答题抽奖”建模