摘要: 要想成为一个通信程序的开发高手,能够开发出稳定的、高效的、伸缩性好、可扩展性强的、单机承载数千甚至上万用户同时在线的网络应用系统,一般至少需要3年以上磨练与经验积累。积累过程中所经历的种种折磨,过来人一定都深有体会 -- 经常地加班加点、熬夜调试、就连做梦的时候都在想着那些不经常出现的bug究竟是什么原因导致的、要如何解决。 支持巨大并发的通信程序的开发是非常复杂的,其涉及到很多方面的专业知识,像TCP、UDP协议、Socket开发、多线程编程、线程池、并发架构、分布式架构、完成端口(IOCP)模型、异步编程模型、设计模式等等。而现在,所有这些经验的结晶都浓缩在ESFramework框架中。E
阅读全文
摘要: ESPlus 是基于网络通信框架ESFramework的增强库。为了更贴近实际应用,加快网络通信系统的开发,ESPlus在ESFramework原生功能的基础上,进行了再次封装,提供了大多数通信系统中经常用到的组件和功能。
阅读全文
摘要: 在新版本的ESFramework/ESPlus中,我们重构了部分接口,这将使得框架的使用更加容易上手;新版本也加入了更多实用的新特性,开发者能更细腻地控制ESFramework提供的强大功能。另外,ESPlus 3.0也是接下来ESPlatform的群集平台1.0能进行发布的前提条件。
阅读全文
摘要: 当我们把基于.NET 2.0开发的网络客户端程序部署到windows 7 家庭普通版上启动时,报出了“配置系统未能初始化”的异常,在另外一些windows 7 家庭普通版的机器上则报出“应用程序无法启动,因为应用程序的并行配置不正确 ”的异常。
阅读全文
摘要: 在分布式通信系统中,安全无疑是非常重要的。ESFramework提供了哪些安全保障了?
阅读全文
摘要: 分而治之的所依据的最根本原则是面向对象的基本设计理念 -- 高内聚、低耦合。当CustomizeHandler类变得复杂庞大时,我们就需要将这个CustomizeHandler拆分为多个高内聚低耦合的类,分而治之。
阅读全文
摘要: 我们的一个C#项目需要调用C++的dll,通过Pinvoke进行方法调用。其中的一个方法及其参数的定义是这样的: [StructLayoutAttribute(LayoutKind.Sequential)] publicstructxvid_gbl_info_t{ ///intpublicintversion;///intpublicintactual_version;///char*[MarshalAsAttribute(UnmanagedType.LPStr)]publicstringbuild;///unsignedintpublicuintcpu_flags;///intpublici
阅读全文
摘要: 在程序之外,是程序员的生活。 当我们刚刚告别校园成为一个程序员时,大都拥有成功的梦想、万分的激情,那时的我们也拥有精力充沛的健康身体。 随时间流逝,5年过去了、10年过去了,也许,梦想可能渐渐暗淡,激情慢慢消退。但,有一点是肯定的,我们的身体大不如前了,像视力下降、慢性胃炎、颈椎病、失眠、神经衰弱等等接踵而来,这些病症几乎成了我们这个行业的职业病。 从健康的角度来说,程序员这个职业,有几个非常不利...
阅读全文
摘要: 在之前版本的Rapid引擎中,是没有提供客户端登陆验证的机制的,如果要验证用户的帐号密码信息,我们只有自己手动通过自定义信息来实现。在2011.04.25发布的新版本中,客户端Rapid引擎,则内置了在初始化时验证用户的帐号密码的功能,这使得登录验证变得更加简单。一.ESPlus.Application.Basic 空间的支持 为了实现验证用户账号密码的功能,ESPlus.Application.Basic 命名空间增加了几个基础设施。(1)ESPlus.Application.Basic.Passive.IBasicOutter 增加了Logon方法: ///<summary>/
阅读全文
摘要: 本文我们将介绍在ESFramework 4.0 快速上手(08) -- 入门Demo,一个简单的IM系统(附源码)的基础上,增加文件传送的功能。如果不了解如何使用ESFramework提供的文件传送功能,可以先看看ESFramework 4.0 快速上手(13) -- 文件传送,如此简单一文的详细介绍。 本Demo可演示以下与文件传送相关的特性:(1)发送方请求发送文件,接收方可以同意或拒绝接收文件。(2)文件传送的过程中,收发的任何一方都可以通过事件了解文件传送的实时进度。(3)文件传送的过程中,收发的任何一方都可以中断文件的传送。(4)文件传送的过程中,收发的任何一方掉线,都将导致文件传.
阅读全文
摘要: 在所有的通信系统中,文件传送是最常见也是最重要的功能之一,ESFramework对文件传送的强大支持也是其亮点之一,使用ESFramework可以非常轻松地实现与文件传送相关的所有需求。ESPlus.Application.FileTransfering命名空间完整地解决了通信中与文件收发相关的问题,可以支持客户端与客户端之间的文件对传、上传文件到服务器以及从服务器下载文件,并且可以监控每个文件传送的实时状态、且内置了文件续传等功能。一.ESPlus的文件传送流程 ESPlus定义了文件传送的标准流程,可以用下图表示: (1)由发送方发起传送文件的请求。(2)接收方回复同意或者拒绝接收文件。.
阅读全文
摘要: 使用ESPlus.Application.CustomizeInfo.Passive.ICustomizeInfoOutter接口的Send方法,我们已经可以给服务端或其它在线客户端发送自定义信息了,那么,如何得知接收方是否已经收到了我们发出的信息了呢?特别是针对一些非常重要的信息,确认对方已经收到是非常重要的。ICustomizeInfoOutter接口增加了SendCertainly方法来解决这个问题。
阅读全文
摘要: 在分布式通信系统中,网络传递的是二进制流,而内存中是我们基于对象模型构建的各种各样的对象,当我们需要将一个对象通过网络传递给另一个节点时,首先需要将其序列化为字节流,然后通过网络发送给目标节点,目标节点接收后,再反序列化为对象实例。在ESFramework体系中,也是遵循同样的规则。 ESFramework称这些需要经过网络传递的对象称之为协议类(Contract),协议类通常只是一个简单的数据结构封装,用于保存状态的一个哑类(不包含任何方法,从object继承的除外),有点类似于与数据库中表进行映射的贫血Entity。(关于Contract更详细的介绍可以参见ESFramework 4...
阅读全文
摘要: ESFramework 4.0 内核(ESFramework.dll)已经相当成熟,不会轻易修改,而在不断增强中的是ESPlus和ESFramework.SL,所以,如下的一些版本变更几乎都是针对ESPlus和ESFramework.SL的。最新版本以及最新demo和帮助文档请到ESFramework 4.0 概述文末下载。 第01次版本更新更新时间:2011.04.12 最新版本:ESPlus v1.2.1.0 ,ESFramework.SL v1.0.2.0更新列表:(1)ESPlus.Application.Basic.Passive.IBasicOutter 增加了查询用户是否在线..
阅读全文
摘要: 在ESFramework 4.0 进阶(02)-- 核心:消息处理的骨架流程一文中,我们介绍了通过挂接IMessageSpy到骨架流程,我们就可以监控到所有收发的消息。由于Rapid引擎已经为我们组装好了默认的骨架流程,如果使用Rapid引擎,我们就无法插入自定义的IMessageSpy。不过没关系,使用Rapid引擎的我们同样可以在服务端监控到客户端发出的所有自定义信息。一.深入ICustomizeInfoOutter接口 我们已经非常熟悉ICustomizeInfoOutter接口了,客户端要发送任何自定义的信息,都是通过该接口来进行的。 publicinterfaceICustomiz.
阅读全文
摘要: 在ESFramework 4.0 快速上手 -- 入门Demo,一个简单的IM系统(附源码)一文中,我们介绍了使用ESFramework的Rapid引擎开发的winform聊天程序,本文我们将在之前demo的基础上添加使用ESFramework.SL开发的Silverlight客户端。这样一来,不仅Silverlight客户端之间可以相互通信,Silverlight客户端还可以跟winform客户端进行通信。如果不了解在Silverlight中如何使用ESFramework,可以先看看ESFramework 4.0 快速上手 -- 在Silverlight中使用ESFramework。 Si.
阅读全文
摘要: 在编码的时候,我们经常预订某个事件来处理它,但很少取消事件的预订,这种做法可能导致程序在运行时出现一些异常。 如果你的某个用于处理事件的对象不是在运行期内永久存在的(比如,不是Singleton对象),那么请记住一条规则:在该对象(事件预订者)的生命周期中只要预订了其他对象(事件发布者)的事件,那么在该对象释放时,一定要取消这些事件的预订。否则,在预订者被释放后,发布者仍然保持着预订者的引用,在对应的事件被触发时,发布者仍然会持有预订者的引用(导致内存泄露),并且调用预订者的处理函数,而由于预订者已经被释放,所以可能引发莫名其妙的问题。(这条规则很早就总结出来了,最近却忘记了,以至于浪费了半.
阅读全文
摘要: 本文我们将介绍使用ESFramework的Rapid引擎开发的一个最简单的Demo,该Demo是一个简单的聊天系统,并演示了以下功能:(1)客户端用户上下线时,通知其他在线用户。(2)当客户端与服务端网络断开时,进行自动重连,当网络恢复后,重连成功。(3)所有在线用户之间可以进行文字聊天。(4)消息同步调用。(5)重登陆模式。当同名的用户登陆时,会把前面的用户挤掉。一.服务端 服务端非常简单,只需要实现ESPlus.Application.CustomizeInfo.Server.ICustomizeInfoBusinessHandler接口以处理客户端的同步请求:View Code pub.
阅读全文
摘要: 作为.NET平台上的通信框架,ESFramework有哪些优点了?我们有什么理由要使用ESFramework来开发自己的通信应用?1.高性能 ESFramework底层使用IOCP模型,使得数据收发与处理达到最高性能。当前主流配置的服务器(如至强4核双CPU、4-8G内存)可轻松处理10000个同时在线连接,每秒处理50000个以上的请求。当然,最终能达到的并发,更取决于具体应用的业务逻辑,如果业务逻辑复杂、处理单个请求都对CPU和内存的消耗都比较高,那么就会导致并发数下降,这时也许就要优化我们的业务逻辑代码了、或者使用更多的服务器来分担负载(比如迁移到ESPlatform)。关于ESFra.
阅读全文
摘要: 在ESFramework 4.0 进阶(02)-- 核心:消息处理的骨架流程一文中我们介绍的ESFramework提供的消息处理的骨架流程,假设我们有这样的需求,我们需要在网关级消息监控器处放置两个监控器,一个用于对收到的消息进行特殊的验证,另一个用于检查重复的消息。咋一看,可能觉得骨架流程做不到这一点,因为它只为网关级监控器预留了一个位置,没有办法将两个网关级监控器挂接到这一个位置上。 ESFramework通过Composite模式解决了这个问题。Composite模式允许将实现了同一接口的多个组件放在一个容器中,而这个容器也实现了相同的接口。如此,我们可以使用这个容器组件来挂接到只接受.
阅读全文
摘要: 在ESFramework框架中基于TCP的服务端引擎(当然也包括Rapid引擎)都采用了这样一条规则:默认情况下,客户端与服务器成功建立TCP连接以后,服务端会从客户端发过来的第一条消息中取出消息头的UserID属性的值,并将其与对应的TCP连接绑定起来。这样,服务端就知道每一个TCP连接所对应的用户UserID,而当我们要求服务端向某个客户端发送消息时,服务端就知道通过哪个TCP连接进行发送了。TCP连接与UserID是一一对应的,一个TCP连接只能对应一个UserID,同样的,一个UserID最多存在一个TCP连接。一.两种重登陆模式 在现实中,经常出现这样的情况:比如我们用的QQ,当我.
阅读全文