ESFramework 通信框架 -- 概述
ESFramework 是一套性能卓越、稳定可靠、强大易用的跨平台通信框架,支持应用服务器集群。其内置了消息的收发与自定义处理(支持同步/异步模型)、消息广播、P2P通道、文件传送(支持断点续传)、心跳检测、断线重连、登录验证、在线用户管理、好友与群组管理、性能诊断、多端登录(同一帐号同时在PC、Android、iOS上登录)、多端助手(类似微信的文件传输助手)等功能。基于ESFramework,您可以方便快捷地开发出各种优秀的网络通信应用。此外,我们在长期实践中所积累的丰富经验,更将成为您强大的技术保障,从开发到上线直至后续运维,全程为您保驾护航,让您高枕无忧。
一. ESFramework 体系的构成
ESFramework体系由通信框架ESFramework 和 群集平台ESPlatform构成。它们的层次依赖关系如下图所示:
基于ESFramework通信框架,我们可以快速而高效地构建应用程序,ESFramework 内置了众多组件供我们直接使用,像自定义信息、文件传送、P2P通道、好友/群组、上下线状态改变通知、序列化器 等等。
基于ESFramework构建的通信应用程序,当同时在线用户数量剧增的时候,只要修改仅仅几行代码和配置,就可以将其平滑地迁移到ESPlatform平台,以实现应用服务器的群集和负载均衡。
跨平台也是ESFramework体系的重要特性之一,ESFramework将通过提供多平台的客户端引擎来实现这一点。ESFramework目前支持的平台如下图所示:
所有类型的客户端都使用几乎完全一致的API接口,且都可与同一ESFramework服务端进行通信,从而使得异构平台变得相对透明。
二. ESFramework 快速开发
本手册将着重介绍如何使用ESFramework提供的Rapid引擎(客户端引擎为ESPlus.Rapid.IRapidPassiveEngine,服务端引擎为ESPlus.Rapid.IRapidServerEngine)来进行通信系统的快速开发。欲掌握ESFramework快速开发,需要抓住三个方面:Rapid引擎、四大核心武器、一个可选功能。
1.Rapid 引擎
在使用ESFramework开发的时候,首先要初始化Rapid引擎 ——服务端是IRapidServerEngine、 客户端是IRapidPassiveEngine。在引擎对象初始化成功之后,我们就可以使用引擎对象暴露出的四大武器了。
2.四大核心武器
通过Rapid引擎对象暴露出的属性,可以获得ESFramework提供的四大武器,大多数情况下,我们正是靠使用这四大武器来进行快速应用开发的。四大武器都都位于ESPlus.Application对应的子空间下:
(1)CustomizeInfo 子空间:用于发送和处理自定义信息。
(2)Basic 子空间: 用于完成在线用户管理、基础功能(如获取在线好友列表等)、和接收用户状态改变通知(如好友上下线等)。
(3)FileTransfering 子空间:用于完成与文件传送相关的所有功能。
(4)P2PSession 子空间: 用于完成与P2P打洞、P2P通信相关的所有功能。
3.可选功能
很多分布式通信应用都涉及到客户端与客户端之间需要交互,或者涉及到群组的功能需求(比如在目标组内广播消息)。为了方便更多的开发者,ESFramework对此提供了直接的支持,并将它们统一称为“联系人”。对于开发一般的系统而言,它们并不是必需的,而且,我们完全可以基于上面的四大武器自己实现这个可选功能。 该可选武器位于ESPlus.Application.Contacts 命名空间下。
“联系人”功能的核心就是IContactsManager接口。注意,类似联系人的添加/移除,组成员的添加/移除等,ESFramework是不关心的,ESPlus关心的是“关系” —— 即某个用户有哪些相关联系人,某个组包含哪些成员。有了这些信息,在用户上/下线时,ESFramework就知道要将上/下线事件通知给哪些相关联系人;组广播时,ESFramework 也才知道要将广播消息发送给哪些用户。
三. ESPlatform 群集平台
ESPlatform平台用于将基于ESFramework开发的应用服务器AS进行群集,以实现负载均衡而达到能负载巨大量的用户同时在线,并且,登录到群集系统中的不同AS上的用户之间可以相互通信,就好像它们登陆在同一个AS上一样。ESPlatform提供了可直接运行的平台服务器(即用于应用服务器群集管理的服务器ACMS),并内置了三种常用的负载均衡策略。
ESFramework体系的一个最大优势在于,从单服务器应用转变为群集应用,是如此的简单。要做的所有事情包括:启动平台服务器ACMS、更改数行代码、修改数行配置。
ESPlatform所支持的的群集模型如下图所示:
在后面介绍ESPlatform的章节,我们将详细介绍群集平台的功能特点,以及如何迁移到群集平台。
四. ESFramework 体系的特点
1.高性能
ESFramework底层使用IOCP模型,使得数据收发与处理达到最高性能。当前主流配置的服务器(如至强4核双CPU、4-8G内存)可轻松处理10000个同时在线连接,每秒处理50000个以上的请求。当然,最终能达到的并发,更取决于具体应用的业务逻辑,如果业务逻辑复杂、处理单个请求都对CPU和内存的消耗都比较高,那么就会导致并发数下降,这时也许就要优化我们的业务逻辑代码了、或者使用更多的服务器来分担负载(比如迁移到ESPlatform)。关于ESFramework的性能测试的更多内容可以参见ESFramework 4.0 性能测试。
2.可靠、稳定
ESFramework起始于2004年,从0.1版本不断完善和优化到今天6.0版本已经有12年时间,其内核(ESFramework.dll)已经相当成熟稳定,所有已经发现的内核bug都已被解决,而且自2009年以来,没有新的内核的bug被发现。另外,ESFramework只会在需要时才使用必要的资源(如CPU、内存),并且会及时释放持有的资源,不会有内存泄露等情况发生。如果您的业务逻辑代码没有bug,那么基于ESFramework的服务端正常运行一年,都不用重启一次。
3.功能强大丰富
现有的大多数通信框架仅仅解决了通信层的问题,而且几乎都是部分地解决。而ESFramework不仅仅完整地解决了通信层的需求,并且也解决了绝大多数通信系统中都关注的应用层的重要问题,这使得基于ESFramework开发分布式通信系统更迅速、更高效。
在通信层:ESFramework 支持TCP/UDP、文本协议/二进制协议、服务端/客户端以及它们组合的任意方式,并提供多种通信引擎供服务端开发人员和客户端开发人员使用。
在应用层:ESFramework 内置了在线用户管理、消息拦截、消息同步调用、回复异步调用、通道智能选择、客户端登录验证、心跳检测、消息优先级、断线自动重连、在线状态改变自动通知(好友与组友)、重登陆模式选择、完整的异常日志、文件传送(支持断点续传)、组广播、带ACK机制的信息发送、高效的二进制序列化器、等等功能。
在安全性:ESFramework 内置了常见的重要安全机制以防止恶意用户在应用层对服务端进行试探或攻击。这些机制有:消息格式完整验证、消息加密、验证未绑定的消息、绑定连接、关闭空连接等。
4.可靠的P2P
ESFramework提供了基于TCP和UDP的P2P通信(不仅是局域网,还支持广域网P2P通信),而且基于UDP的P2P做了增强,以保证基于UDP的P2P通信也像TCP一样可靠。在客户端之间需要高频通信的分布式系统中(如IM系统等),可靠的P2P通信将为您节省巨大的带宽和服务器成本。
5.高伸缩性的群集平台
ESPlatform平台支持基于ESFramework的应用程序的Cluster(群集),其内置了3种最常用的负载均衡策略。仅仅通过修改几行代码就可以将一个基于ESFramework的应用程序平滑迁入到ESPlatform平台中,以实现多台应用服务器的Cluster,从而应对日益增长的巨大并发。使用ESPlatform群集,我们可以非常方便地在运行时动态添加/移除应用服务器(AS)实例节点。
6.跨平台
跨平台是ESFramework的重要目标之一,ESFramework通过提供多平台的客户端引擎来实现客户端跨平台,而服务端基于.NET Core构建,可以在 Windows 和 Linux 系统上运行。基于ESFramework开发的不同平台的客户端之间可以相互通信,如此,异构环境将变得透明化。ESFramework目前支持的客户端平台包括:.NET、Android、iOS、Mac OS、Xamarin、Mono、Unity、WebSocket、WPF 等。
7.服务端性能诊断
ESFramework框架在服务端内置了性能跟踪诊断功能。如果基于ESFramework构建的服务端在运行时,遇到性能问题或某些故障,那么可以开启诊断功能,ESFramework将自动跟踪每种类型消息的处理情况,之后通过分析日志,就可以很快发现问题所在。
8.适用范围广
ESFramework 可以用于任何需要分布式通信的软件系统中,而且其群集功能还可以支持那些同时在线用户数巨大的系统。比如,即时通讯系统(IM),大型多人在线游戏(MMORPG)、在线网页游戏(WebGame)、文件传送系统(FTS)、数据采集系统(DGS)、分布式OA系统等等。
9.文档齐全、接口清晰规范
ESFramework提供的所有接口和API都具有良好的编码风格,与.NET Framework完全一致。我们提供了MSDN风格的帮助文档、Demo源码、ESFramework开发手册系列文章供您研究和学习使用ESFramework进行开发。
10.历史经验分享
我们在过去的10+年里,基于ESFramework开发了很多网络通信系统,也为诸多客户提供技术支持和运行故障排查服务,所以,在以下方面积累了丰富的经验:如基于ESFramework的最佳开发实践、服务端性能瓶颈排查、服务端运行故障排查、性能优化等等。如果您是第一次基于ESFramework进行二次开发,那么,我们分享的这些经验将为您的项目上线运行提供更强大的后续保障。
五. ESFramework与WCF等技术的区别
WCF以及WebService、.NET Remoting,还有更古老的RPC、DCOM等,这些技术一脉相承,它们要达到的最核心目标就是要像调用本地方法一样调用远程方法。它们是标准的C/S结构,且服务端处于被动的状态,即,通常都是客户端主动向服务器请求并获取结果,服务端一般不主动发信息给客户端。
对于那些只需要客户端主动请求服务器的应用来说,使用这些技术是非常合适的。但是,也有很多应用不仅仅需要客户端主动请求服务端,同时也需要服务端能主动通知客户端,有的甚至需要客户端之间相互传递消息。像很多网络游戏、IM系统等等,就有类似的需求。在这种情况下,使用WCF等技术就不太合适,虽然,我们可以手动做很多工作来模拟达到类似的效果,但是,这并不划算,而且,这也偏离了WCF等技术的设计目标。
相反,ESFramework就非常适合类似的需求,并且ESFramework与应用贴得更近,为应用提供了更强大的支持(像可靠P2P、服务器群集等),就如上面介绍ESFramework特点时所讲述的那样。
在大体浏览了ESFramework体系的概貌后,可以从这里阅读有关ESFramework的详细介绍文章。
下一篇:ESFramework 开发手册(01) -- 发送和处理信息
-----------------------------------------------------------------------------------------------------------------------------------------------
Q Q:168757008