摘要: ESFramework介绍之(23)―― AgileTcp 前面已经介绍了ITcp接口,而AgileTcp就是ESFramework给出的ITcp的参考实现。在之前,我曾经讲解过模拟完成端口的Tcp组件实现和异步Tcp组件实现,在它们的基础之上,我更改了处理策略,而形成了AgileTcp,目的是更清晰的结构、更高的效率。这个策略会在后面讲到。 Tcp组件主要控制着系统与终端用户的所有消息的进出,ITcp接口描述了这个组件的外貌,告诉外部如何使用Tcp组件、如何与Tcp组件交互。而从实现的角度来看,我们必须理清Tcp组件的职责:(1)管理所有已经建立的Tcp连接(2)管理与每个连接相对应接收缓. 阅读全文
posted @ 2011-11-25 17:08 火腿骑士 阅读(177) 评论(0) 推荐(0) 编辑
摘要: .NET平台下可复用的Tcp通信层实现(续) 上一篇主要讲到了Tcp通信层中的核心组件――Tcp组件的实现,Tcp组件是整个通信层的消息驱动源,甚至,可以将Tcp组件看作是我们整个服务器系统的消息驱动源,消息处理过程从这里引发。类似的消息驱动源还有发布的WebService接口、Remoting接口等。今天我们需要关注的是Tcp通信层中的“中央”组件――消息分派器组件ITcpReqStreamDispatcher,大家已经从前文的组件关系图中看到了消息分派器的大致位置和作用了,它是Tcp通信组件和消息处理器之间的“桥梁”。我们再对前文描述的通信层组件之间关系的一段话回顾一下: “当网络(Tc. 阅读全文
posted @ 2011-11-25 16:46 火腿骑士 阅读(217) 评论(0) 推荐(0) 编辑
摘要: .NET平台下可复用的Tcp通信层实现 2006年已经来临,回首刚走过的2005,心中感慨万千。在人生和生活的目标上,有了清晰明确的定位,终于知道了自己喜欢什么样的生活,喜欢什么样的生活方式;在技术上,成熟了不少,眼界也开阔的不少,从面向对象到组件、从.Net到J2EE、从微软到开源,颇有收获。特别值得一提的是,认识了Rod Johnson这个大牛人,也终于在自己的项目中正式使用Spring.net框架来开发了,这确实是一个优秀的框架。而在已经到来的2006年,我有一个主要目标就是B/S应用开发,来填补自己在企业级开发上的另一半空白。 以前就很想将自己在Tcp通信层的开发心得、经验共享出来.. 阅读全文
posted @ 2011-11-25 16:39 火腿骑士 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 有很多朋友要求给出一个应用ESFramework的Demo,在前面介绍ESFramework支持的4层架构中(回顾),有AS、FS、IRAS,其中FS的功能需求最简单,所以本文就给出一个FS实现示例。 FS主要用于管理功能插件,并且将所有的功能性请求都转发给对应的功能插件处理,不需要关心用户(由AS管理)、不用关心具体的业务需求(由对应的功能插件处理),所以FS非常的单纯,基本上是与应用无关的,可以在任何应用中复用同一个FS。(但是AS和IRAS就很难复用了,因为不同的应用对AS、IRAS的需求的差别可能非常大)。实际上,FS的实现自己只包含4个cs文件,绝大多数组件都由ESFramework 阅读全文
posted @ 2011-11-25 16:30 火腿骑士 阅读(180) 评论(0) 推荐(0) 编辑
摘要: ESFramework介绍之(27)-- 支持OverdueMessage (离线消息)(本文适用于ESFramework V0.2+) QQ上,你给好友发消息,如果对方不在线,则服务器会把这个消息持久化存起来,等好友下次上线时,再转发给他。像这样的消息在ESFramework中称为OverdueMessage。显然,MSN没有支持OverdueMessage。当然了,ESFramework中的OverdueMessage不仅仅是文字消息,而是可以为任何类型的消息,比如,音频、视频、文件等等。 ESFramework中对所有P2P的消息的处理都是由P2PMessageDealer完成的,当P2 阅读全文
posted @ 2011-11-25 16:03 火腿骑士 阅读(128) 评论(0) 推荐(0) 编辑
摘要: ESFramework 4.0 快速上手(15) -- 客户端登录验证 在之前版本的Rapid引擎中,是没有提供客户端登陆验证的机制的,如果要验证用户的帐号密码信息,我们只有自己手动通过自定义信息来实现。在2011.04.25发布的新版本中,客户端Rapid引擎,则内置了在初始化时验证用户的帐号密码的功能,这使得登录验证变得更加简单。一.ESPlus.Application.Basic 空间的支持 为了实现验证用户账号密码的功能,ESPlus.Application.Basic 命名空间增加了几个基础设施。(1)ESPlus.Application.Basic.Passive.IBasicO. 阅读全文
posted @ 2011-11-25 16:00 火腿骑士 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 好久没有写关于ESFramework的文章了,曾很早就承诺过要写一篇介绍基于ESFramework实现NAPT P2P的文章,今天终于能抽出时间做这件事。网络地址转换NAT(或者NAPT)的基本理论知识,网上有很多相关资料,不是很清楚的朋友可以先了解下什么是NAT、以及为什么要使用NAT。使用NAT的一个非常常见的场合就是P2P技术,要使两个隐藏在不同的局域网后面机器能够相互通信,并不是一件非常简单的事情,因为,这两台机器没有公网地址,相互之间是无法直接通过IPEndPoint访问的。NAT解决了这个问题,虽然并不是所有的操作系统都完整的支持NAT,幸运的是,主流的操作系统一般都是支持的。通常 阅读全文
posted @ 2011-11-25 15:41 火腿骑士 阅读(175) 评论(0) 推荐(0) 编辑
摘要: ESFramework介绍之(7)-- 服务器代理IServerAgent (本文原作于2006.03.15,第一次修正于2006.06.06,修正后适用于ESFramework V0.3+) (本文是ESFramework对客户端开发的支持特性之一 ,如果要按顺序阅读,请转到ESFramework介绍(序)) 分布式系统的构建一般有两种模式,一是基于消息(如Tcp,http等),一是基于方法调用(如RPC、WebService、Remoting)。深入想一想,它们其实是一回事。如果你了解过.NET的Proxy,那么你会发现,方法调用和消息请求/回复实际上是可以相互转换的,.NET的Prox. 阅读全文
posted @ 2011-11-25 13:54 火腿骑士 阅读(288) 评论(0) 推荐(0) 编辑
摘要: ESFramework介绍之(4)――消息拦截器INetMessageHook 网络上传输的消息经常是经过加密和压缩,有的特定类型的消息可能还需要进行其它变形,ESFramework通过INetMessageHook对这些功能提供支持。需要说明的是,ESFramework对消息进行截获(Hook)处理有两种方式,一是仅仅Hook处理消息主体(Body),而不对消息头作任何变换;另一种方式是对整个消息(包括消息头和主体)都进行Hook处理。通常,第一种方式已经能够满足我们的大多数应用,并且效率也更高,如果应用有更特殊的要求,可以采用第二种方式。本文先介绍第一种方式,后面的文章中会对第二种给予讲. 阅读全文
posted @ 2011-11-25 13:41 火腿骑士 阅读(228) 评论(0) 推荐(0) 编辑
摘要: ESFramework介绍之(32)―― Tcp客户端核心组件关系图 如果你的客户端基于ESFramework构建,并使用Tcp与服务端通信。通过这篇文章你将知道如何迅速、高效地创建客户端应用。 ESFramework对基于Tcp客户端的支持主要在ESFramework.Network.Tcp.Passive命名空间,下图给出了该命名空间中的核心组件,以及这些组件之间的关系: 下面解释一下这些组件的作用、职责。我们从最底层的通信组件NetworkStream向上看:(1)NetworkStream 即是System.Net.Sockets.NetworkStream类,在ESFramewor. 阅读全文
posted @ 2011-11-25 13:37 火腿骑士 阅读(198) 评论(0) 推荐(0) 编辑
摘要: ESFramework介绍之(20)―― 插件自动升级 当我们的服务平台搭建成功后,所需要做的主要事情就是开发服务端功能插件(IFunAddin)和客户端插件(IPassiveAddin),每个插件对(AddinPair)实现了一组相似或相近的需求/功能。 好了,我们已经开发了十多对插件对,然后分别XCopy到了各个服务器节点上,“整个系统”已经投入了运行。通过前面的介绍(回顾),相信大家对我们的“整个系统”有了个大致的映像。我们的IRAS服务器通常只存在于一个节点上,而我们的AS和对应的多个FS通常分布在非常多个节点上(比如每个大中城市都分配一个AS),而且这些节点相距非常遥远,深圳AS位. 阅读全文
posted @ 2011-11-25 13:10 火腿骑士 阅读(235) 评论(0) 推荐(0) 编辑
摘要: ESFramework介绍之(8)-- 客户端插件IPassiveAddin 前文已经提到了,在IServerAgent的基础上,客户端也可以采用插件的结构形式,客户端插件需要实现IPassiveAddin接口。我的想法是,当客户端主程序加载一个新的PassiveAddin时,可以在某个菜单的子Items上添加一项,当双击这个子菜单项时,则弹出该客户端插件提供的“业务操作窗体”。这只是使用客户端插件的可行方式之一,你完全可以根据你的应用来决定使用形式。IPassiveAddin接口定义如下: 1 ///<summary>2///IPassiveAddin用于客户端的插件。通常一个P 阅读全文
posted @ 2011-11-25 13:08 火腿骑士 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 本实验用于测试ESFramework服务端引擎的性能,测试程序使用ESFramework 4.0版本。一.准备工作测试的机器总共有3台,都是普通的PC,一台作为服务器,两台作为客户端。作为服务器是PC配置如下:操作系统:Windows Server 2003 Enterprise Edition SP2CPU:Pentium Dual-Core CPU E5400 @ 2.70GHz内存:2G二.测试策略 本实验所采用的策略是这样的:(1)每个客户端实例首先与服务器建立N个TCP连接,然后依次在每个TCP连接上发送一个36字节的消息。遍历一次完毕后,等待(Sleep)M毫秒,再进行下一轮遍历发 阅读全文
posted @ 2011-11-25 12:52 火腿骑士 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 现在我们将在ESFrameworkDemo -- 文件传送Demo的基础上,使用ESPlus提供的第四个武器,为其增加P2P通信的功能。在阅读本文之前,请务必先掌握ESFramework 开发手册(04) -- 可靠的P2P一文中介绍的P2P的基础知识以及相关API的用法。 本Demo主要演示以下功能:(1)创建基于TCP的P2P通道(2)创建基于UDP的P2P通道(内部使用可靠的UDP)(3)使用P2P通道发送消息和传送文件一.服务端 在P2P打洞的过程中,服务端会参与协助P2P通道的建立,整个过程是由ESFramework/ESPlus内部自动完成的,而这个过程对于框架使用者是透明的。P. 阅读全文
posted @ 2011-11-25 12:39 火腿骑士 阅读(213) 评论(0) 推荐(0) 编辑