摘要: 凡是带有“池”的,比如数据库连接池、对象池、缓冲区池(后面可以看到IBuffPool)等等,都是为了避免资源的反复创建/销毁所带来的开销。需要为哪些资源对象建立“池”了?这些资源对象通常符合下面几个特性:(1)在应用中需要反复的被创建/销毁。(2)创建/销毁的开销比较大(3)应用中给定时刻,对该资源对象的数量要求比较大(4)资源对象最好是无状态的(Stateless),这样方便直接复用 ... 阅读全文
posted @ 2006-03-16 13:12 zhuweisky 阅读(6143) 评论(0) 推荐(0)
摘要: 使用ESFramework开发C/S(通常为4层、3层也没问题)应用,当需要增加一项新的业务时,我们需要做的仅仅是开发两个插件,一个是服务端的业务功能插件(FunAddin),一个是客户端插件(PassiveAddin),这两个插件合在一起称为Addin Pair。开发这两个插件,只需要关注于业务,而其它与业务无关的比如网络通信、加密、数据安全,都不用管。ESFramework很好的将这些... 阅读全文
posted @ 2006-03-16 09:38 zhuweisky 阅读(3161) 评论(4) 推荐(1)
摘要: 前文已经提到了,在IServerAgent的基础上,客户端也可以采用插件的结构形式,客户端插件需要实现IPassiveAddin接口。 我的想法是,当客户端主程序加载一个新的PassiveAddin时,可以在某个菜单的子Items上添加一项,当双击这个子菜单项时,则弹出该客户端插件提供的“业务操作窗体”。这只是使用客户端插件的可行方式之一,你完全可以根据你的应用来决定使用形式。IPa... 阅读全文
posted @ 2006-03-15 17:06 zhuweisky 阅读(3287) 评论(1) 推荐(0)
摘要: (本文原作于2006.03.15,第一次修正于2006.06.06,修正后适用于ESFramework V0.3+) (本文是ESFramework对客户端开发的支持特性之一 ,如果要按顺序阅读,请转到ESFramework介绍(序)) 分布式系统的构建一般有两种模式,一是基于消息(如Tcp,http等),一是基于方法调用(如RPC、WebService、Remo... 阅读全文
posted @ 2006-03-15 16:13 zhuweisky 阅读(4284) 评论(2) 推荐(0)
摘要: ESFramework网络通信框架这是一套完全可复用的、灵活的、单纯的、支持N层C/S架构的网络通信框架,内置了对Tcp和Udp协议的支持。ESFramework网络通信框架不仅仅提供了一个基础的C/S框架和大量C/S应用中常用的组件,而且在ESFramework网络通信框架框架之上,引入的一个扩展层--ESFramework网络通信框架扩展层,专门用于解决的与具体应用相关的领域问题。本来Tcp/udp组件是系统与外界交换消息的唯一进出口,而Tcp组件或Udp组件与我们系统唯一的联系是通过消息分派器IMessageDispatcher,如此一来,就相当于ESFramework规定了消息分派器是我们应用与外界交换消息的进出口。 阅读全文
posted @ 2006-03-14 10:02 zhuweisky 阅读(5361) 评论(0) 推荐(0)
摘要: 网络上传输的消息经常是经过加密和压缩,有的特定类型的消息可能还需要进行其它变形,ESFramework通过INetMessageHook对这些功能提供支持。需要说明的是,ESFramework对消息进行截获(Hook)处理有两种方式,一是仅仅Hook处理消息主体(Body),而不对消息头作任何变换;另一种方式是对整个消息(包括消息头和主体)都进行Hook处理。通常,第一种方式已经能够满足我... 阅读全文
posted @ 2006-03-13 14:44 zhuweisky 阅读(4612) 评论(4) 推荐(0)
摘要: 从2004年7月开始,就一直从事N层C/S架构的服务端的开发,时至今日,慢慢的积累了一些开发经验,ESFramework网络通信框架体系便是这些经验的总结。ESFramework网络通信框架这是一套完全可复用的、灵活的、单纯的、支持N层C/S架构的网络通信框架,内置了对Tcp和Udp协议的支持。ESFramework网络通信框架不仅仅提供了一个基础的C/S框架和大量C/S应用中常用的组件,而且在ESFramework网络通信框架框架之上,引入的一个扩展层--ESFramework网络通信框架扩展层,专门用于解决的与具体应用相关的领域问题。 无论是服务端还是客户端,都需要对接收到的消息进行处理,在ESFramework网络通信框架中,处理消息的组件称为消息处理器,所有的消息处理器都实现了接口IDataDealer 阅读全文
posted @ 2006-03-13 12:56 zhuweisky 阅读(5472) 评论(0) 推荐(0)
摘要: 从2004年7月开始,就一直从事N层C/S架构的服务端的开发,时至今日,慢慢的积累了一些开发经验,ESFramework网络通信框架体系便是这些经验的总结。ESFramework网络通信框架这是一套完全可复用的、灵活的、单纯的、支持N层C/S架构的网络通信框架,内置了对Tcp和Udp协议的支持。ESFramework网络通信框架不仅仅提供了一个基础的C/S框架和大量C/S应用中常用的组件,而且在ESFramework网络通信框架框架之上,引入的一个扩展层--ESFramework网络通信框架扩展层,专门用于解决的与具体应用相关的领域问题。 阅读全文
posted @ 2006-03-13 09:56 zhuweisky 阅读(7330) 评论(0) 推荐(0)
摘要: 通过网络通信的系统之间(如客户端与服务端的通信)要想正常交互,它们必须有“共同的语言”,这种语言就是消息协议。遵守消息协议的消息才能被我们的系统所理解。ESFramework网络通信框架是如何来处理该问题的?给大家分享下我们的思路。 阅读全文
posted @ 2006-03-12 19:53 zhuweisky 阅读(9531) 评论(5) 推荐(2)
摘要: 在我前面的“压缩与解压缩 ZipHelper ”一文中提到了使用ICSharpCode.SharpZipLib.dll库的BZip2OutputStream和BZip2InputStream来进行数据流的压缩。这几天在我的AgileIM的测试中发现使用BZip2OutputStream和BZip2... 阅读全文
posted @ 2006-03-09 11:49 zhuweisky 阅读(1704) 评论(2) 推荐(0)
摘要: 我在AgileIM的开发中解决视频/音频会话功能时,发现传输的音/视频数据量太大,通过一些格式转换(如BMP->JPG、或 帧间预测编码)可以适当减少带宽的需求,但是仍然不能满足需求,于是我想到了数据压缩,经过我测试、普通的音/视频数据经压缩后可以只有原来的一半大小,基本可以满足需要了。压缩/解压... 阅读全文
posted @ 2006-03-06 09:40 zhuweisky 阅读(3645) 评论(11) 推荐(0)
摘要: .NET FrameWork 1.1之前版本根本不支持多媒体,.NET FrameWork 2.0也只是对多媒体进行了最简单最有限的支持,如果在我们的.NET程序中需要播放多媒体文件,通常只有通过互操作引入Activex控件来播放音频/视频。在网上找了N久关于C#播放rm视频的文章,终于有了一点结... 阅读全文
posted @ 2006-02-15 11:14 zhuweisky 阅读(5685) 评论(14) 推荐(0)
摘要: 说这是一个完全的解决方案,其实有点夸大了,但这个方案确实可以缓解TCP服务器遭受“拒绝服务攻击”时表现出的脆弱性。 当服务器以Tcp的方式提供服务时,客户端通过tcp连接上服务器。这时,恶意的程序,也可以通过tcp连接我们的服务器,如果恶意的程序采用循环与我们的服务器建立成千上万的连接,并在每个连接上都发送恶意的数据包给服务器,慢慢就会导致服务器资源耗尽而崩溃! 为了增强Tcp服务器在遭受“拒绝服务攻击”时的稳定性,我采用的方案是这样的:(1)通信协议的消息头增加Token字段,并且它是消息头的第一个字段。当服务器接收到一段数据,如果这段数据不是以Token打头,则关闭对应的TCP连接。这样. 阅读全文
posted @ 2006-02-10 14:52 zhuweisky 阅读(2942) 评论(6) 推荐(1)
摘要: 近日,做一个分布式数据库定时同步的项目,也就是说有多个物理节点上的数据库需要在每天某时来同步表中的数据,对于某个指定节点上的某个表发生的变化(增量)可以通过对该表执行的SqlCommand来记录,当同步过程发生时,需要对其它所有节点上的同名表执行相同的SqlCommand。由于,同步是定时发生的,所以增量SqlCommand就需要首先被保存起来,开始我们计划将其序列化后保存在数据库中,但是到运行时,问题来了,SqlCommand是不可序列化的!!!所有继承自IDbCommand的类都是不可序列化的,所有继承自IDbParameter的实现类都是不可序列化的。 遇到了这个问题,是我们当初没有料. 阅读全文
posted @ 2006-02-07 11:46 zhuweisky 阅读(2185) 评论(4) 推荐(0)
摘要: (本文转自梦想风暴的blog)一个朋友发了封mail问了几个问题,其中的一个是关于IoC和DI的:Inversion of Control和Dependency Injection 是什么关系,我认为两个词代表的是同一个意思,只是两种不同的表示,对吗? 下面是我对这个问题的一些理解。准确的说,IoC和DI并不相同,这一点从字面上就可以看出,否则,它们可以叫一个名字。^_^ 理解IoC,我们需要知... 阅读全文
posted @ 2006-01-19 12:41 zhuweisky 阅读(2919) 评论(0) 推荐(0)
摘要: 以前曾写过一篇“关于跨程序集的反射”的blog,关于跨程序集加载类型,文中使用的是方法是:先加载目标类型所在的程序集,再使用Assembly.GetType方法获取类型。文后Luna兄的评论说,可以直接使用Type.GetType(">,>")来加载类型,当初我查了MSDN,MSDN中也说到了这一... 阅读全文
posted @ 2006-01-06 14:44 zhuweisky 阅读(2584) 评论(5) 推荐(2)
摘要: 上一篇主要讲到了Tcp通信层中的核心组件――Tcp组件的实现,Tcp组件是整个通信层的消息驱动源,甚至,可以将Tcp组件看作是我们整个服务器系统的消息驱动源,消息处理过程从这里引发。类似的消息驱动源还有发布的WebService接口、Remoting接口等。今天我们需要关注的是Tcp通信层中的“中... 阅读全文
posted @ 2006-01-05 11:13 zhuweisky 阅读(5394) 评论(8) 推荐(1)
摘要: 2006年已经来临,回首刚走过的2005,心中感慨万千。在人生和生活的目标上,有了清晰明确的定位,终于知道了自己喜欢什么样的生活,喜欢什么样的生活方式;在技术上,成熟了不少,眼界也开阔的不少,从面向对象到组件、从.Net到J2EE、从微软到开源,颇有收获。特别值得一提的是,认识了Rod Johns... 阅读全文
posted @ 2006-01-04 15:40 zhuweisky 阅读(9472) 评论(15) 推荐(3)
摘要: 在Web开发中,经常需要使用Session来保存特定用户的信息,在我们的程序中很多地方散落着类似下面的语句:intuserAge=(int)this.Session["UserAge"]; 我们知道,Session中存放的是键值对,键是string类型的,如果我们一不小心把上面的语句写成这样:in... 阅读全文
posted @ 2005-12-31 17:20 zhuweisky 阅读(2314) 评论(4) 推荐(0)
摘要: 1、大多数人想要改造这个世界,但却罕有人想改造自己。 2、积极的人在每一次忧患中都看到一个机会, 而消极的人则在每个机会都看到某种忧患。 3、莫找借口失败,只找理由成功。(不为失败找理由,要为成功找方法) 4、伟人之所以伟大,是因为他与别人共处逆境时,别人失去了信心,他却下决心实现自己的目标。 5、世上没有绝望的处境,只有对处境绝望的人。 ... 阅读全文
posted @ 2005-12-30 19:02 zhuweisky 阅读(1885) 评论(0) 推荐(0)