随笔分类 -  C#

上一页 1 ··· 4 5 6 7 8 9 10 11 下一页
C#
摘要:ESFramework介绍之(27)-- 支持OverdueMessage (离线消息)(本文适用于ESFramework V0.2+) QQ上,你给好友发消息,如果对方不在线,则服务器会把这个消息持久化存起来,等好友下次上线时,再转发给他。像这样的消息在ESFramework中称为OverdueMessage。显然,MSN没有支持OverdueMessage。当然了,ESFramework中的OverdueMessage不仅仅是文字消息,而是可以为任何类型的消息,比如,音频、视频、文件等等。 ESFramework中对所有P2P的消息的处理都是由P2PMessageDealer完成的,当P2 阅读全文
posted @ 2011-11-25 16:03 火腿骑士 阅读(140) 评论(0) 推荐(0)
摘要:ESFramework 4.0 快速上手(15) -- 客户端登录验证 在之前版本的Rapid引擎中,是没有提供客户端登陆验证的机制的,如果要验证用户的帐号密码信息,我们只有自己手动通过自定义信息来实现。在2011.04.25发布的新版本中,客户端Rapid引擎,则内置了在初始化时验证用户的帐号密码的功能,这使得登录验证变得更加简单。一.ESPlus.Application.Basic 空间的支持 为了实现验证用户账号密码的功能,ESPlus.Application.Basic 命名空间增加了几个基础设施。(1)ESPlus.Application.Basic.Passive.IBasicO. 阅读全文
posted @ 2011-11-25 16:00 火腿骑士 阅读(188) 评论(0) 推荐(0)
摘要:好久没有写关于ESFramework的文章了,曾很早就承诺过要写一篇介绍基于ESFramework实现NAPT P2P的文章,今天终于能抽出时间做这件事。网络地址转换NAT(或者NAPT)的基本理论知识,网上有很多相关资料,不是很清楚的朋友可以先了解下什么是NAT、以及为什么要使用NAT。使用NAT的一个非常常见的场合就是P2P技术,要使两个隐藏在不同的局域网后面机器能够相互通信,并不是一件非常简单的事情,因为,这两台机器没有公网地址,相互之间是无法直接通过IPEndPoint访问的。NAT解决了这个问题,虽然并不是所有的操作系统都完整的支持NAT,幸运的是,主流的操作系统一般都是支持的。通常 阅读全文
posted @ 2011-11-25 15:41 火腿骑士 阅读(187) 评论(0) 推荐(0)
摘要:ESFramework介绍之(7)-- 服务器代理IServerAgent (本文原作于2006.03.15,第一次修正于2006.06.06,修正后适用于ESFramework V0.3+) (本文是ESFramework对客户端开发的支持特性之一 ,如果要按顺序阅读,请转到ESFramework介绍(序)) 分布式系统的构建一般有两种模式,一是基于消息(如Tcp,http等),一是基于方法调用(如RPC、WebService、Remoting)。深入想一想,它们其实是一回事。如果你了解过.NET的Proxy,那么你会发现,方法调用和消息请求/回复实际上是可以相互转换的,.NET的Prox. 阅读全文
posted @ 2011-11-25 13:54 火腿骑士 阅读(308) 评论(0) 推荐(0)
摘要:ESFramework介绍之(4)――消息拦截器INetMessageHook 网络上传输的消息经常是经过加密和压缩,有的特定类型的消息可能还需要进行其它变形,ESFramework通过INetMessageHook对这些功能提供支持。需要说明的是,ESFramework对消息进行截获(Hook)处理有两种方式,一是仅仅Hook处理消息主体(Body),而不对消息头作任何变换;另一种方式是对整个消息(包括消息头和主体)都进行Hook处理。通常,第一种方式已经能够满足我们的大多数应用,并且效率也更高,如果应用有更特殊的要求,可以采用第二种方式。本文先介绍第一种方式,后面的文章中会对第二种给予讲. 阅读全文
posted @ 2011-11-25 13:41 火腿骑士 阅读(244) 评论(0) 推荐(0)
摘要:ESFramework介绍之(32)―― Tcp客户端核心组件关系图 如果你的客户端基于ESFramework构建,并使用Tcp与服务端通信。通过这篇文章你将知道如何迅速、高效地创建客户端应用。 ESFramework对基于Tcp客户端的支持主要在ESFramework.Network.Tcp.Passive命名空间,下图给出了该命名空间中的核心组件,以及这些组件之间的关系: 下面解释一下这些组件的作用、职责。我们从最底层的通信组件NetworkStream向上看:(1)NetworkStream 即是System.Net.Sockets.NetworkStream类,在ESFramewor. 阅读全文
posted @ 2011-11-25 13:37 火腿骑士 阅读(217) 评论(0) 推荐(0)
摘要:ESFramework介绍之(20)―― 插件自动升级 当我们的服务平台搭建成功后,所需要做的主要事情就是开发服务端功能插件(IFunAddin)和客户端插件(IPassiveAddin),每个插件对(AddinPair)实现了一组相似或相近的需求/功能。 好了,我们已经开发了十多对插件对,然后分别XCopy到了各个服务器节点上,“整个系统”已经投入了运行。通过前面的介绍(回顾),相信大家对我们的“整个系统”有了个大致的映像。我们的IRAS服务器通常只存在于一个节点上,而我们的AS和对应的多个FS通常分布在非常多个节点上(比如每个大中城市都分配一个AS),而且这些节点相距非常遥远,深圳AS位. 阅读全文
posted @ 2011-11-25 13:10 火腿骑士 阅读(249) 评论(0) 推荐(0)
摘要:ESFramework介绍之(8)-- 客户端插件IPassiveAddin 前文已经提到了,在IServerAgent的基础上,客户端也可以采用插件的结构形式,客户端插件需要实现IPassiveAddin接口。我的想法是,当客户端主程序加载一个新的PassiveAddin时,可以在某个菜单的子Items上添加一项,当双击这个子菜单项时,则弹出该客户端插件提供的“业务操作窗体”。这只是使用客户端插件的可行方式之一,你完全可以根据你的应用来决定使用形式。IPassiveAddin接口定义如下: 1 ///<summary>2///IPassiveAddin用于客户端的插件。通常一个P 阅读全文
posted @ 2011-11-25 13:08 火腿骑士 阅读(201) 评论(0) 推荐(0)
摘要:本实验用于测试ESFramework服务端引擎的性能,测试程序使用ESFramework 4.0版本。一.准备工作测试的机器总共有3台,都是普通的PC,一台作为服务器,两台作为客户端。作为服务器是PC配置如下:操作系统:Windows Server 2003 Enterprise Edition SP2CPU:Pentium Dual-Core CPU E5400 @ 2.70GHz内存:2G二.测试策略 本实验所采用的策略是这样的:(1)每个客户端实例首先与服务器建立N个TCP连接,然后依次在每个TCP连接上发送一个36字节的消息。遍历一次完毕后,等待(Sleep)M毫秒,再进行下一轮遍历发 阅读全文
posted @ 2011-11-25 12:52 火腿骑士 阅读(177) 评论(0) 推荐(0)
摘要:现在我们将在ESFrameworkDemo -- 文件传送Demo的基础上,使用ESPlus提供的第四个武器,为其增加P2P通信的功能。在阅读本文之前,请务必先掌握ESFramework 开发手册(04) -- 可靠的P2P一文中介绍的P2P的基础知识以及相关API的用法。 本Demo主要演示以下功能:(1)创建基于TCP的P2P通道(2)创建基于UDP的P2P通道(内部使用可靠的UDP)(3)使用P2P通道发送消息和传送文件一.服务端 在P2P打洞的过程中,服务端会参与协助P2P通道的建立,整个过程是由ESFramework/ESPlus内部自动完成的,而这个过程对于框架使用者是透明的。P. 阅读全文
posted @ 2011-11-25 12:39 火腿骑士 阅读(238) 评论(0) 推荐(0)
摘要:做winform程序,很多时候都需要用到插件式的,所以本人做了一个Demo,思路跟网上思路基本一致,现在共享出来如有需要的朋友可以下载。申明:部分代码来源于网上,当然思路也是,呵呵 原理很简单:一:定义插件接口二:实现插件接口并建立不同工项目,使其在生成时生成不同的DLL三:主程序运行时根据接口名利用反射对插件目录的DLL进行加载,加载完成后便可以使用插件接口定义的方法或属性了。下面上几张图,有兴趣的朋友可以先看看,觉得值得一看的朋友可以下载。 项目结构:DefaultPlugin,PosPlugin两个项目均为插件,均实现了Iplugin接可Iplugin接口 usingSystem;usi 阅读全文
posted @ 2011-11-24 16:59 火腿骑士 阅读(256) 评论(0) 推荐(0)
摘要:ESFramewor使用技巧(2)-- 在插件中使用NHibernate 我们来讨论一下这种情景,你采用基于ESFramework的4层架构进行应用开发,你分析用户的需求,并将其分类整理为几大块,考虑每一块使用一个功能插件来完成。在这几个插件中,有个插件需要访问某个数据库,并且只有这个插件需要访问这个数据库,根据插件的“自治”性质,你不想将本插件中的数据访问“上升蔓延”到应用程序(FS),而是让它“仅仅”在本插件中,这样,无论是对FS还是插件都是有好处的--FS自己不需要访问数据库(日志记录除外),插件“自治”、而且插件之间相互独立,整个系统的结构是非常清晰简单的。 好了,我们决定在那个需要. 阅读全文
posted @ 2011-11-24 16:54 火腿骑士 阅读(149) 评论(0) 推荐(0)
摘要:在Mike Taulty的视频教程中有一个动态加载silverlight应用程序的DEMO,其程序运行效果如下: 当加载dll之后: 其实实现这个的效果本身并不难,主要是这个DEMO的应用场景可以让人做很大的扩展,比如说插件机制等. 好了,让我们看看如何实际去开发这个示例,以便让大家从流程和技术点上有个了解. 首先我们需要建立一个叫DynamicLoading的silverlight Application, 然后将如下的内容拷贝到Page.xaml中:<UserControlx:Class="DynamicLoading.Page"xmlns="http: 阅读全文
posted @ 2011-11-24 16:45 火腿骑士 阅读(198) 评论(0) 推荐(0)
摘要:我的架构经验小结(三)-- 深入三层架构 在 我的架构经验小结(二)-- 关于三层架构一文中,已经比较深入的介绍过三层架构方面的一些经验了,现在,我们来使用一个更小的比例尺来近距离观察我所理解的三层架构。一.三层架构图二.系统各层次职责1.UI(User Interface)层的职责是数据的展现和采集,数据采集的结果通常以Entity object提交给BL层处理。Service Interface侧层用于将业务或数据资源发布为服务(如WebServices)。2.BL(Business Logic)层的职责是按预定的业务逻辑处理UI层提交的请求。(1)Business Function 子层 阅读全文
posted @ 2011-11-24 16:35 火腿骑士 阅读(241) 评论(0) 推荐(0)
摘要:TCP服务器“拒绝服务攻击” 解决方案 说这是一个完全的解决方案,其实有点夸大了,但这个方案确实可以缓解TCP服务器遭受“拒绝服务攻击”时表现出的脆弱性。 当服务器以Tcp的方式提供服务时,客户端通过tcp连接上服务器。这时,恶意的程序,也可以通过tcp连接我们的服务器,如果恶意的程序采用循环与我们的服务器建立成千上万的连接,并在每个连接上都发送恶意的数据包给服务器,慢慢就会导致服务器资源耗尽而崩溃! 为了增强Tcp服务器在遭受“拒绝服务攻击”时的稳定性,我采用的方案是这样的:(1)通信协议的消息头增加Token字段,并且它是消息头的第一个字段。当服务器接收到一段数据,如果这段数据不是以To. 阅读全文
posted @ 2011-11-24 16:28 火腿骑士 阅读(166) 评论(0) 推荐(0)
摘要:经过这几年的积累,在系统架构方面逐渐积累了一些自己的经验,到今天有必要对这些经验作个小结。在我的架构思维中,主要可以归类为三种架构模型:3/N层架构、“框架+插件”架构、地域分布式架构。 一.三种架构模型1.3/N层架构 这是经典的多层架构模型,对于稍微复杂一点或特别复杂的系统,不使用分层架构是很难想象的。下图是经典的3层架构: 如今,凡是个程序员都能侃侃而谈3/N层架构,这确实是解决系统复杂性的一种主流模式,但是,只要采用了3/N层架构是不是就一定能解决系统的复杂性了?不一定,关键在于你在你的系统中如何实作你的3/N层结构。 在采用了3/N层架构后,我们还是要解决以下非常重要的问题:系统的可 阅读全文
posted @ 2011-11-24 16:10 火腿骑士 阅读(196) 评论(0) 推荐(1)
摘要:(本文名字取为“服务器系统自动升级”,实际上适用于所有应用程序自动升级的情况。) 前文介绍了在服务器或客户端应用程序运行的过程中,插件如何自动升级、更新。基于前文相同的理由,AS、FS、IRAS也需要有自动升级的功能。 与插件在运行时动态更新不同,服务器系统无法在运行时动态更新,只有在服务器系统重新启动的时候,才是自动升级的切入点。(1)对于功能服务器FS,可以采用持续/逐个更新的方式,即依次重启每个功能服务器。这样可以避免功能服务被中断的情况发生。需要注意的是,只有当目标FS上没有功能请求时,才可重启该FS,否则,会导致终端出现发出请求没有响应的糟糕的用户体验。解决方案是:在FS重启之前,F 阅读全文
posted @ 2011-11-24 11:56 火腿骑士 阅读(307) 评论(0) 推荐(0)
摘要:当我们的服务平台搭建成功后,所需要做的主要事情就是开发服务端功能插件(IFunAddin)和客户端插件(IPassiveAddin),每个插件对(AddinPair)实现了一组相似或相近的需求/功能。 好了,我们已经开发了十多对插件对,然后分别XCopy到了各个服务器节点上,“整个系统”已经投入了运行。通过前面的介绍(回顾),相信大家对我们的“整个系统”有了个大致的映像。我们的IRAS服务器通常只存在于一个节点上,而我们的AS和对应的多个FS通常分布在非常多个节点上(比如每个大中城市都分配一个AS),而且这些节点相距非常遥远,深圳AS位于深圳、上海AS位于上海、武汉AS位于武汉等等。整个系统非 阅读全文
posted @ 2011-11-24 11:48 火腿骑士 阅读(169) 评论(0) 推荐(0)
摘要:http://blog.csdn.net/zhuweisky/article/details/411825这个题目听起来蛮吓人的,毕竟本人的经验值也不高,却大放厥词在这里谈“企业级”。原因有二,一是把这一年以来的开发DataServer服务器的工作做个总结;二是希望能抛砖引玉,希望这方面的研究和交流繁荣起来,毕竟,目前讲这方面实战经验的文章资料太少了。正式开题之前,绝对有必要先简单的介绍相关的背景。在写这篇文章的时候,我在航天量子数码科技有限公司(Aeromatex)产品部工作,全权负责DataServer的设计与实现。DataServer基于GIS/GPS是用于提供各种基于位置服务及其它远程 阅读全文
posted @ 2011-11-24 11:36 火腿骑士 阅读(357) 评论(0) 推荐(0)
摘要:最初之所以要采用插件的形式进行开发,主要是为了解决功能服务的“热插拔”问题,在决定采用“框架+插件”的方式进行设计后,我们就更进一步,打算将一个个可以分割开来的拥有完整功能的组件都做成插件的形式,并且使同类型的插件的接口兼容,这样在以后需要改变时就可以灵活的进行替换。比如,将通信部分做成通信插件、日志记录部分做成日志插件等等。首先,我们要弄清楚,什么是插件?我给出了一个定义,可能有失偏颇。 插件又称为扩展,是一种特殊的组件,用于增强和扩展基本框架的行为能力。插件和框架的通信协议是一组接口,插件的各种特性都可以通过该接口进行访问。插件主要有如下特点:(1)一个插件是一个独立的物理单元。它可以独立 阅读全文
posted @ 2011-11-24 09:26 火腿骑士 阅读(228) 评论(0) 推荐(1)

上一页 1 ··· 4 5 6 7 8 9 10 11 下一页