`
soboer
  • 浏览: 1307616 次
文章分类
社区版块
存档分类
最新评论

ESFramework 开发手册(00) -- 概述(暨ESPlus 2.0正式发布!)

 
阅读更多
自从最后一次发布ESFramework/ESPlus至今,已经过去5个月了。今天,ESPlus 2.0 终于正式和大家见面了。现在ESFramework相关的各个组件的最新版本号分别是:ESFramework 4.0.7.0,ESPlus 2.0.0.0,ESFramework.SL 1.2.0.0,ESFramework.WP 1.0.0.0。可以从我们官网下载这次发布的所有组件、文档、以及demo。

相对于以往版本,此次发布更新的主要内容有:

  1. 可靠的UDP。在原始UDP的基础上再次封装,模拟TCP机制,以保证基于UDP的通信像TCP一样可靠。
  2. 强大的P2P。P2P打洞的成功率在90%以上,而且,对于开发者,P2P是透明的,如果底层的P2P通道可用,则客户端之间的通信直接使用P2P通道传送。
  3. 文件夹传送。前面的版本,仅仅支持单个文件的传送,而在新版本中,可以直接传送整个文件夹(采用与传送文件完全相同的模型和API)。
  4. 部分重构和重命名。客户端的供框架回调的IBasicBusinessHandler接口、IFileBusinessHandler接口都被删除了,其中的回调方法都转换成了对应*Outter的事件。这将使开发者用起来更方便。

曾写过ESFramework4.0快速上手系列的文章,对于当前的最新版本,其中的部分内容已经过时。所以,我们打算针对最新版本,重写一个更完整更系统的ESFramework开发教程。本文就作为第一篇吧,我们从ESFramework的体系结构开始介绍。

ESFramework 体系的构成

ESFramework体系直接构建在.NET Framework 2.0上,它由通信核心ESFramework、应用增强ESPlus、以及群集平台ESPlatform构成。它们的层次依赖关系如下图所示:
我们的应用程序可以直接基于通信核心ESFramework来构建,这样做可以拥有最大限度的灵活性来组装整个应用,但是需要手动做的工作也最多。为了快速而高效地构建应用程序,我们可以基于ESPlus进行开发。ESPlus内置众多组件供我们直接使用,像消息头、解析器、消息处理器、序列化器、自定义信息、文件传送、P2P通道、好友/组友状态改变通知、等等。
基于ESPlus构建的通信应用程序,当同时在线用户数量剧增的时候,只要修改仅仅几行代码和配置,就可以将其平滑地迁移到ESPlatform平台,以实现应用服务器的群集和负载均衡。
跨平台是ESFramework体系的重要特性之一,ESFramework将通过提供多平台的客户端引擎来实现这一点。跨平台解决方案的第一阶段主要任务是对主流移动设备的支持。其规划图如下所示:

注意,由于受平台的限制,移动设备的客户端引擎以及Silverlight客户端引擎仅仅提供基础的通信功能(即后面提到的四大武器中的前两大武器),暂时不支持文件传送和P2P。所有类型的客户端都使用几乎完全一致的API接口,且都可与同一ESFramework服务端进行通信,从而使得异构平台变得相对透明。

ESPlus 快速开发

本手册将着重介绍如何使用ESPlus提供的Rapid引擎(客户端引擎为ESPlus.Rapid.IRapidPassiveEngine,服务端引擎为ESPlus.Rapid.IRapidServerEngine)来进行ESFramework通信系统的快速开发。欲掌握ESPlus快速开发,需要抓住三个方面:Rapid引擎、四大武器、两翼。

1.Rapid 引擎
在使用ESPlus开发的时候,首先要初始化Rapid引擎 ——服务端是RapidServerEngine、 客户端是RapidPassiveEngine。在引擎对象初始化成功之后,我们就可以使用引擎对象暴露出的四大武器了。

2.四大武器
  通过Rapid引擎对象暴露出的属性,可以获得ESPlus提供的四大武器,大多数情况下,我们正是靠使用这四大武器来进行快速应用开发的。四大武器都都位于ESPlus.Application空间下:

  • ESPlus.Application.CustomizeInfo 命名空间:用于发送和处理自定义信息。
  • ESPlus.Application.Basic 命名空间:用于完成基础功能(如获取在线好友列表等)、和接收用户状态改变通知(如好友上下线等)。
  • ESPlus.Application.FileTransfering 命名空间:用于完成与文件传送相关的所有功能。
  • ESPlus.Application.P2PSession 命名空间:用于完成与P2P打洞、P2P通信相关的所有功能。

3.两翼
  很多分布式通信应用都涉及到客户端与客户端之间需要交互,或者涉及到群组的功能需求(比如在目标组内广播消息)。ESPlus对此二点都提供了直接的支持,并将它们分别命名为好友关系以及组关系,使用IFriendManager与IGroupManager接口来进行抽象表示。
  “两翼”指的就是IFriendManager与IGroupManager。注意,类似好友的添加/移除,组成员的添加/移除等,ESPlus是不关心的,ESPlus关心的是“关系” —— 即某个用户有哪些好友,某个组包含哪些成员。有了这些信息,在用户上/下线时,ESPlus就知道要将上/下线事件通知给哪些好友和组友;组广播时,ESPlus也才知道要将广播消息发送给哪些用户。

ESPlatform 群集平台

ESPlatform平台用于将基于ESPlus开发的应用服务器AS进行群集,以实现负载均衡而达到能负载巨大量的用户同时在线。ESPlatform的群集模型是非常灵活的,其有四种基本变形,从最简单的群集到最全面的群集,以满足各种不同应用的群集需要。ESPlatform提供了平台服务器(即用于群集管理的服务器,应用群集管理服务器ACMS、广播群集管理服务器BCMS、转发群集管理服务器TCMS)、广播服务器BS、转发服务器TS、登录服务器LS,并内置了三种常用的负载均衡策略。
ESFramework体系的一个最大优势在于,从单服务器应用转变为群集应用,是如此的简单。要做的所有事情包括:启动平台服务器、更改数行代码、修改数行配置。
ESPlatform所支持的最全面的群集模型如下图所示:

在后面介绍ESPlatform的章节,我们将详细介绍从简单到复杂的四种群集模型,以及它们各自的应用场景。

ESFramework体系的特点

1.高性能
ESFramework底层使用IOCP模型,使得数据收发与处理达到最高性能。当前主流配置的服务器(如至强4核双CPU、4-8G内存)可轻松处理10000个同时在线连接,每秒处理50000个以上的请求。当然,最终能达到的并发,更取决于具体应用的业务逻辑,如果业务逻辑复杂、处理单个请求都对CPU和内存的消耗都比较高,那么就会导致并发数下降,这时也许就要优化我们的业务逻辑代码了、或者使用更多的服务器来分担负载(比如迁移到ESPlatform)。关于ESFramework的性能测试的更多内容可以参见ESFramework 4.0 性能测试


2.可靠、稳定
ESFramework内核(ESFramework.dll)已经相当成熟稳定,其所有已经发现的bug都已被解决,而且自从2009年以来,没有新的内核的bug被发现。另外,ESFramework只会在需要时才使用必要的资源(如CPU、内存),并且会及时释放持有的资源,不会有内存泄露等情况发生。如果您的业务逻辑代码没有bug,那么基于ESFramework的服务端正常运行一年,都不用重启一次。

3.功能强大丰富
现有的大多数通信框架仅仅解决了通信层的问题,而且几乎都是部分地解决。而ESFramework不仅仅完整地解决了通信层的需求,并且也解决了绝大多数通信系统中都关注的应用层的重要问题,这使得基于ESFramework开发分布式通信系统更迅速、更高效。
在通信层:ESFramework 支持TCP/UDP(支持可靠的UDP通信)、文本协议/二进制协议、服务端/客户端以及它们组合的任意方式,并提供多种通信引擎供服务端开发人员和客户端(包括Windows桌面客户端和Silverlight,以后还会提供flash、iphone、android客户端引擎)开发人员使用。
在应用层:ESFramework 内置了在线用户管理、消息拦截、消息同步调用、客户端登录验证、心跳检测、消息优先级、断线自动重连、在线状态改变自动通知(好友与组友)、重登陆模式选择、完整的异常日志、文件传送(支持断点续传)、组广播、带ACK机制的信息发送、高效的二进制序列化器、等等功能。

4.可靠的P2P
ESFramework提供了基于TCP和UDP的P2P通信,而且ESFramework在原始UDP基础上做了增强,以保证基于UDP的通信也像TCP一样可靠。在客户端之间需要高频通信的分布式系统中(如IM系统等),可靠的P2P通信将为您节省巨大的带宽和服务器成本。

5.高伸缩性的群集平台
ESPlatform平台支持基于ESFramework的应用程序的Cluster(群集),其内置了3种最常用的负载均衡策略。在不需要修改代码的情况下,仅仅通过配置就可以将一个基于ESFramework的应用程序平滑迁入到ESPlatform平台中,以实现多台应用服务器的Cluster,从而应对日益增长的巨大并发。使用ESPlatform群集,我们可以非常方便地在运行时动态添加/移除应用服务器(AS)、广播服务器(BS)、转发服务器(TS)等实例节点。
6.跨平台
跨平台是ESFramework体系的重要目标之一,ESFramework通过提供多平台的客户端引擎来实现这一点。 当跨平台全面实现后,基于ESFramework开发的不同平台的客户端之间可以相互通信,如此,异构环境将变得透明化。
目前提供的客户端引擎包括:windows .NET客户端引擎(位于ESPlus中)是基于.NET 2.0构建的;ESFramework.SL是基于Silverlight 3.0构建的,ESFramework.WP 是基于windows phone OS 7.1构建的。我们尽可能地采用较低版本的运行库构建客户端引擎,利用运行库的向下兼容性,使ESFramework能被尽可能多的开发者使用。
另外,ESFramework的flash客户端引擎、iphone 客户端引擎、android客户端引擎正在开发中,敬请期待。

7.可扩展性强
ESFramework规定了消息处理的骨架流程,并在骨架中提供了足够多的扩展点,使您可以轻松地挂接您自己开发的组件(比如加密/解密组件、或消息监控组件等)。另外,ESFramework在设计和实现时采用了接口分离原则,使得大多数内置组件都可以被自定义的组件所替代。

8.适用范围广
ESFramework 可以用于任何需要分布式通信的软件系统中,而且其群集功能还可以支持那些同时在线用户数巨大的系统。比如,即时通讯系统(IM),大型多人在线游戏(MMORPG)、在线网页游戏(WebGame)、文件传送系统(FTS)、数据采集系统(DGS)、分布式OA系统等等。
9.文档齐全、接口清晰规范
ESFramework提供的所有接口和API都具有良好的编码风格,与.NET Framework完全一致。我们提供了MSDN风格的帮助文档、Demo源码、ESFramework开发手册系列文章供您研究和学习使用ESFramework进行开发。

10.使用简单、上手容易
ESFramework 虽然功能强大丰富,但是使用非常简单,因为其采用了优秀的架构设计和实现,将复杂性都屏蔽在了框架的内部,暴露给使用者的都是简单易用、清晰明确的API。而且,ESFramework还提供了Rapid引擎给使用者进行快速开发,从未接触过ESFramework的人,也可以在1-2个小时之内便上手使用Rapid引擎开发分布式通信系统。
要特别提醒一下,由于ESFramework涉及到很多方面的专业知识,像TCP、UDP协议、P2P技术、Socket开发、多线程编程、线程池、并发架构、分布式架构、完成端口(IOCP)模型、异步编程模型、控制反转、依赖注入思想、设计模式等等,所以,其并不是很适合编程初学者研究,最好是有2-3年开发经验,熟悉设计模式(特别是IOC模式)的工程师来了解并基于ESFramework做二次开发,才可以迅速进入状态,如果是有丰富的架构设计或框架设计方面经验的设计师或架构师,就更能准确地把握ESFramework的精髓了。

ESFramework与WCF等技术的区别

WCF以及WebService、.NET Remoting,还有更古老的RPC、DCOM等,这些技术一脉相承,它们要达到的最核心目标就是要像调用本地方法一样调用远程方法。它们是标准的C/S结构,且服务端处于被动的状态,即,通常都是客户端主动向服务器请求并获取结果,服务端一般不主动发信息给客户端。
对于那些只需要客户端主动请求服务器的应用来说,使用这些技术是非常合适的。但是,也有很多应用不仅仅需要客户端主动请求服务端,同时也需要服务端能主动通知客户端,有的甚至需要客户端之间相互传递消息。像很多网络游戏、IM系统等等,就有类似的需求。在这种情况下,使用WCF等技术就不太合适,虽然,我们可以手动做很多工作来模拟达到类似的效果,但是,这并不划算,而且,这也偏离了WCF等技术的设计目标。
相反,ESFramework就非常适合类似的需求,并且ESFramework与应用贴得更近,为应用提供了更强大的支持(像可靠P2P、服务器群集等),就如上面介绍ESFramework特点时所讲述的那样。

在大体浏览了ESFramework体系的概貌后,后面的文章我们将详细介绍ESFramework的各个特性以及如何使用。谢谢。
-----------------------------------------------------------------------------------------------------------------------------------------------
关于ESFramework的任何问题,欢迎联系我们:
电话:15807162718
Q Q:372841921
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics