摘要: 从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 阅读(5446) 评论(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 阅读(7299) 评论(0) 推荐(0) 编辑
摘要: 通过网络通信的系统之间(如客户端与服务端的通信)要想正常交互,它们必须有“共同的语言”,这种语言就是消息协议。遵守消息协议的消息才能被我们的系统所理解。ESFramework网络通信框架是如何来处理该问题的?给大家分享下我们的思路。 阅读全文
posted @ 2006-03-12 19:53 zhuweisky 阅读(9513) 评论(5) 推荐(2) 编辑
摘要: 在我前面的“压缩与解压缩 ZipHelper ”一文中提到了使用ICSharpCode.SharpZipLib.dll库的BZip2OutputStream和BZip2InputStream来进行数据流的压缩。这几天在我的AgileIM的测试中发现使用BZip2OutputStream和BZip2... 阅读全文
posted @ 2006-03-09 11:49 zhuweisky 阅读(1685) 评论(2) 推荐(0) 编辑
摘要: 我在AgileIM的开发中解决视频/音频会话功能时,发现传输的音/视频数据量太大,通过一些格式转换(如BMP->JPG、或 帧间预测编码)可以适当减少带宽的需求,但是仍然不能满足需求,于是我想到了数据压缩,经过我测试、普通的音/视频数据经压缩后可以只有原来的一半大小,基本可以满足需要了。压缩/解压... 阅读全文
posted @ 2006-03-06 09:40 zhuweisky 阅读(3629) 评论(11) 推荐(0) 编辑
摘要: .NET FrameWork 1.1之前版本根本不支持多媒体,.NET FrameWork 2.0也只是对多媒体进行了最简单最有限的支持,如果在我们的.NET程序中需要播放多媒体文件,通常只有通过互操作引入Activex控件来播放音频/视频。在网上找了N久关于C#播放rm视频的文章,终于有了一点结... 阅读全文
posted @ 2006-02-15 11:14 zhuweisky 阅读(5673) 评论(14) 推荐(0) 编辑
摘要: 说这是一个完全的解决方案,其实有点夸大了,但这个方案确实可以缓解TCP服务器遭受“拒绝服务攻击”时表现出的脆弱性。 当服务器以Tcp的方式提供服务时,客户端通过tcp连接上服务器。这时,恶意的程序,也可以通过tcp连接我们的服务器,如果恶意的程序采用循环与我们的服务器建立成千上万的连接,并在每个连接上都发送恶意的数据包给服务器,慢慢就会导致服务器资源耗尽而崩溃! 为了增强Tcp服务器在遭受“拒绝服务攻击”时的稳定性,我采用的方案是这样的:(1)通信协议的消息头增加Token字段,并且它是消息头的第一个字段。当服务器接收到一段数据,如果这段数据不是以Token打头,则关闭对应的TCP连接。这样. 阅读全文
posted @ 2006-02-10 14:52 zhuweisky 阅读(2911) 评论(6) 推荐(1) 编辑
摘要: 近日,做一个分布式数据库定时同步的项目,也就是说有多个物理节点上的数据库需要在每天某时来同步表中的数据,对于某个指定节点上的某个表发生的变化(增量)可以通过对该表执行的SqlCommand来记录,当同步过程发生时,需要对其它所有节点上的同名表执行相同的SqlCommand。由于,同步是定时发生的,所以增量SqlCommand就需要首先被保存起来,开始我们计划将其序列化后保存在数据库中,但是到运行时,问题来了,SqlCommand是不可序列化的!!!所有继承自IDbCommand的类都是不可序列化的,所有继承自IDbParameter的实现类都是不可序列化的。 遇到了这个问题,是我们当初没有料. 阅读全文
posted @ 2006-02-07 11:46 zhuweisky 阅读(2174) 评论(4) 推荐(0) 编辑
摘要: (本文转自梦想风暴的blog)一个朋友发了封mail问了几个问题,其中的一个是关于IoC和DI的:Inversion of Control和Dependency Injection 是什么关系,我认为两个词代表的是同一个意思,只是两种不同的表示,对吗? 下面是我对这个问题的一些理解。准确的说,IoC和DI并不相同,这一点从字面上就可以看出,否则,它们可以叫一个名字。^_^ 理解IoC,我们需要知... 阅读全文
posted @ 2006-01-19 12:41 zhuweisky 阅读(2900) 评论(0) 推荐(0) 编辑
摘要: 以前曾写过一篇“关于跨程序集的反射”的blog,关于跨程序集加载类型,文中使用的是方法是:先加载目标类型所在的程序集,再使用Assembly.GetType方法获取类型。文后Luna兄的评论说,可以直接使用Type.GetType(">,>")来加载类型,当初我查了MSDN,MSDN中也说到了这一... 阅读全文
posted @ 2006-01-06 14:44 zhuweisky 阅读(2567) 评论(5) 推荐(2) 编辑
摘要: 上一篇主要讲到了Tcp通信层中的核心组件――Tcp组件的实现,Tcp组件是整个通信层的消息驱动源,甚至,可以将Tcp组件看作是我们整个服务器系统的消息驱动源,消息处理过程从这里引发。类似的消息驱动源还有发布的WebService接口、Remoting接口等。今天我们需要关注的是Tcp通信层中的“中... 阅读全文
posted @ 2006-01-05 11:13 zhuweisky 阅读(5370) 评论(8) 推荐(1) 编辑
摘要: 2006年已经来临,回首刚走过的2005,心中感慨万千。在人生和生活的目标上,有了清晰明确的定位,终于知道了自己喜欢什么样的生活,喜欢什么样的生活方式;在技术上,成熟了不少,眼界也开阔的不少,从面向对象到组件、从.Net到J2EE、从微软到开源,颇有收获。特别值得一提的是,认识了Rod Johns... 阅读全文
posted @ 2006-01-04 15:40 zhuweisky 阅读(9445) 评论(15) 推荐(3) 编辑
摘要: 在Web开发中,经常需要使用Session来保存特定用户的信息,在我们的程序中很多地方散落着类似下面的语句:intuserAge=(int)this.Session["UserAge"]; 我们知道,Session中存放的是键值对,键是string类型的,如果我们一不小心把上面的语句写成这样:in... 阅读全文
posted @ 2005-12-31 17:20 zhuweisky 阅读(2297) 评论(4) 推荐(0) 编辑
摘要: 1、大多数人想要改造这个世界,但却罕有人想改造自己。 2、积极的人在每一次忧患中都看到一个机会, 而消极的人则在每个机会都看到某种忧患。 3、莫找借口失败,只找理由成功。(不为失败找理由,要为成功找方法) 4、伟人之所以伟大,是因为他与别人共处逆境时,别人失去了信心,他却下决心实现自己的目标。 5、世上没有绝望的处境,只有对处境绝望的人。 ... 阅读全文
posted @ 2005-12-30 19:02 zhuweisky 阅读(1841) 评论(0) 推荐(0) 编辑
摘要: 最初Peter Deutsch从J2EE的企业开发中总结了7大谬误,后来,James Gosling在其基础上增加了一条,再后来,Ted Neward又在其上增加了两条,总共为“十大谬误”。这段时间正在看两本书:《Effective Enterprise Java》和《J2EE AntiPatterns》,恰好两本书都提到了“分布式计算的*大谬误”,... 阅读全文
posted @ 2005-12-30 16:05 zhuweisky 阅读(1264) 评论(0) 推荐(1) 编辑
摘要: 设想这样一种场景:我们的服务系统提供一系列的功能服务,而以后会有更多新的功能服务增加进来,也可能出现功能服务需要被更改或移除的情况。对于这样的服务系统,一个常见的基本的要求就是,在添加/移除/更新功能服务的时候不能停止的服务系统的运行。通常,将每一项服务封装成一个插件Dll,可以非常容易地实现“插件 阅读全文
posted @ 2005-12-30 15:26 zhuweisky 阅读(6206) 评论(13) 推荐(4) 编辑
摘要: 手头上的一个项目使用了Spring.net的AOP了处理程序的异常,一不小心就掉进了陷阱,这里记录下来,希望对后来者有所帮助。Spring.net的AOP实现是通过运行时创建动态的AOP代理来完成的。简单图示如下: 图中的“POJO”以词来自Java,表示一个普通的.net对象,所有对POJO的调... 阅读全文
posted @ 2005-12-27 15:37 zhuweisky 阅读(1225) 评论(0) 推荐(0) 编辑
摘要: 一个组件与另一个组件之间的关系可以通过三种方式建立起来:事件、依赖倒置、Bridge。现在我们只考虑单向依赖的关系,即信息提供者和信息消费者。事件是一种松耦合的信息发布方式,事件发布者(信息提供者)不需要关心事件预定者(即信息消费者)的任何信息,但是事件预定者需要依赖事件发布者;依赖倒置则反转了这种关系,在依赖倒置的方式中,信息提供者依赖信息消费者(你也许对这句话觉得奇怪,后面的例子会说明... 阅读全文
posted @ 2005-12-20 21:32 zhuweisky 阅读(4318) 评论(14) 推荐(1) 编辑
摘要: 在.Net Remoting的应用中,经常碰到需要预定Remoting Object的事件的情况,要能使远程事件发布/预定如预期中的进行,需要注意如下问题:1. Remoting 配置 在Remoting配置文件中,需要将typeFilterLevel设置为Full,否则,将出现RemotingH... 阅读全文
posted @ 2005-12-16 15:33 zhuweisky 阅读(2645) 评论(2) 推荐(0) 编辑
摘要: 在DataGrid的web版控件中提供了自动分页的功能,但是我从来没用过它,因为它实现的分页只是一种假相。我们为什么需要分页?那是因为符合条件的记录可能很多,如果一次读取所有的记录,不仅延长获取数据的时间,而且也极度浪费内存。而分页的存在的主要目的正是为了解决这两个问题(当然,也不排除为了UI美观... 阅读全文
posted @ 2005-12-14 09:48 zhuweisky 阅读(2632) 评论(4) 推荐(0) 编辑