ESFramework介绍的(9)-- 插件对(Addin Pair)调试 框架

使用ESFramework开发C/S(通常为4层、3层也没问题)应用当需要增加项新业务时我们需要做仅仅是开发两个插件个是服务端业务功能插件(FunAddin)个是客户端插件(PassiveAddin)这两个插件合在起称为Addin Pair开发这两个插件只需要关注于业务而其它和业务无关比如网络通信、加密、数据安全都不用管ESFramework很好将这些关注点分离开来使得写“业务&rdq... [阅读全文]

连接池:ESFramework介绍的(10)-- Tcp连接池

凡是带有“池”比如数据库连接池、对象池、缓冲区池(后面可以看到IBuffPool)等等都是为了避免资源反复创建/销毁所带来开销需要为哪些资源对象建立“池”了?这些资源对象通常符合下面几个特性:  (1)在应用中需要反复被创建/销毁  (2)创建/销毁开销比较大  (3)应用中给定时刻对该资源对象数量要求比较大  (4)资源对象最好是无状态(State... [阅读全文]

连接池:ESFramework介绍的(11)-- Tcp连接池管理器

上文已经讲到Tcp连接池管理器为我们应用进行了很多复杂管理比如功能服务器调度(实现FS负载均衡)、连接池动态添加/移除、控制每个连接池相关参数在UI上显示等并且连接池管理器和单个连接池拥有样接口ITcpPool我们先回顾下这个接口:1   public erface ITcpPool2   {3     RentStreamResult RentTcpStream( poolTypeKey , s... [阅读全文]

连接池:ESFramework介绍的(12)―― 基于Tcp连接池的消息处理器

前面两篇文章我们已经介绍了Tcp连接池和Tcp连接池管理器并且引入了ITcpPool接口这个接口可以将单个连接池和组连接池统起来使它们有相同外部使用方式现在我们需要考虑问题是当消息分派器分派个接收到请求时如果这个请求需要被FS上某个功能插件处理那么消息分派器是如何将这个消息分派到对应FS上去?  回顾介绍消息分派器时画出各消息组件联系图我们非常自然想到创建个消息处理器这个消息处理器将请求消息通过T... [阅读全文]

ESFramework介绍的(13)-- 功能插件处理器工厂

上文讲述是AS中基于连接池消息处理器现在我们把焦点转移到功能服务器FS上来看看FS上消息分派过程当FS接收到到个请求后会从已加载功能插件列表中选择个合适插件来处理这个消息而每个功能插件就相当于个消息处理器FS和AS结构致:  本文内容非常简单上面图示也基本上描述FS主体结构后面我们会关注AS和FS的间非功能通信并介绍说明整个平台是如何实现FS动态添加/移除并解释如何在网络不稳定情况下保证AS和FS... [阅读全文]

ESFramework介绍的(14)-- AS和FS通信方案

前面我们已经多次提到每个AS都有组FS为的服务(回顾)AS将接收到功能请求通过Tcp连接池或Remoting转发给某个FS处理下面我们将深入讨论AS和FS的间通信机制  首先要解决第个问题AS如何知道每个为的服务FS地址?  最常见种解决方案是AS处配置文件中有个FS地址列表AS每次启动时就读取这个列表然后和列表中每个FS建立Tcp连接池这种方案很容易实现但是有很多缺点最主要是当动态添加/移除FS... [阅读全文]

iraspin:ESFramework介绍的(15)-- IRAS

每个城市都对应着自己AS每个AS都有组FS为的服务而所有AS都由个IRAS联系/管理起来(回顾)前面我们已经提到所有FS都可以是动态添加/移除并且FS地址也是自由可变同样所有AS也都是可以动态添加/移除并且AS地址也是可变(这里AS和IRAS机制同上文介绍FS和AS的间机制样)但是唯不能随便变化是IRAS地址这是所有终端连第个服务器就是IRAS然后从IRAS获取目AS地址这样才去连接目AS请求服务... [阅读全文]

邮件自动发送器:ESFramework介绍的(16)―― Tcp数据自动发送器ITcpAutoSender

我们已经积累了这样经验:如果有个大块数据需要通过Tcp发送我们会采用异步方式以避免当前工作线程阻塞那么如果我们有多个线程需要同时发送大块数据了?每个线程都在NetworkStream或Socket上提交异步发送数据请求会导致数据发送混乱(多个线程同时在个Socket上进行写操作)所以我引入了前面介绍线程安全网络流在引入这个类后似乎日子已经很好过了但是新功能要求使得我需要寻找另外解决方案  考虑下这... [阅读全文]

ESFramework介绍的(17)―― 支持漫游用户和跨区域功能请求

对于漫游用户支持和跨区域功能请求支持是ESFramework最基本目的(回顾)在详细讲述解决方案的前先了解下有关这个问题上下文  在我们前面讲述4层C/S架构中每个AS负责块区域比如上海AS负责处理所有目标城市为上海功能请求和管理所有在上海AS上注册用户(比如PDA用户或手机用户)如果个本是在上海注册用户出差来到了武汉最方便他会连上武汉AS这样对于武汉AS来说这个用户就是漫游用户了  如果上海用户... [阅读全文]

ESFramework介绍的(18)―― Tcp用户管理器组件

当我们应用中客户端和AS的间是通过Tcp进行通信时候通常应用也要求管理所有在线用户这种管理至少包含以下几点:  (1)当用户上线时记录上线时间  (2)当用户请求服务时记录请求服务时间、服务类型、本次服务下载数据量  (3)当用户下线时记录下线时间并把本次用户登录、请求服务过程中所有信息持久化保存(如记录到数据库)   在ESFramework中实现这种管理是ITcpUserManager组件通常... [阅读全文]

active:ESFramework介绍的(19)―― 对动态组ActiveGroup的支持

什么是动态组?举个例子就清楚了QQ支持多人在个组中聊天模式是群这是种静态组;而MSN中动态将多个人拉到个组中来群聊就是动态组有关动态组还有个很好例子就是多人联网游戏比如联网星际首先由发起者创建个组(动态组)然后其它玩家加入进来开始游戏游戏结束了该动态组就销毁了所以说动态组是个“临时性”生命比较短暂;而静态组通常被存储于永久介质(如数据库)中即使这场游戏结束这个组依然存在如Q... [阅读全文]

linq框架:DataRabbit 轻量的数据访问框架(14)-- DataRabbit 3.0 和 Linq to sql 性能比较

本文举例源代码或素材下载   今天装好了VS2008 Beta2就迫不及待地试用下Linq中ORM功能在初步尝试后发现Linq中ORM还是非常不错通过反射查看.Data.Linq.dll发现Linq中ORM是使用反射完成了OR映射工作基于此我开始有点怀疑Linq中ORM性能问题为了进步研究问题我写了个简单测试在事务中使用DataRabbit 3.0和 Linq to sql 以OR... [阅读全文]

DataRabbit 轻量的数据访问框架(15)-- IOrmAccesser的BatchInsert批量插入

DataRabbit3.0为ORM访问器提供了批量插入功能其思路方法定义如下:    /// summary    /// BatchInsert 批量插入组记录忽略所有Blob字段    /// /summary       void BatchInsert(IListEntityType entityList);   当我们需要次性向同Table中插入大量(如千条以上)记录时使用BatchIn... [阅读全文]

orm框架:DataRabbit 轻量的ORM框架(16)-- Entity缓存Cache

在许多项目应用中我们设计数据库中些表中数据变化频率很慢比如我们有个GameInformation表保存所有已上线游戏信息这个表中数据变动频率就很小(可能两个月才会有个新游戏上线或偶尔修改下已上线游戏具体信息(通常都是不需紧急更新))而且这个表中数据又经常被用到比如根据GameID获取游戏名字、介绍等等这种表就很适合缓存Cache在内存中这样可以提供更好性能和有效地降低数据库负载  DataRabb... [阅读全文]

orm框架:DataRabbit 轻量的ORM框架(17)-- 使用DataRabbit的最佳实战

在DataRabbit 轻量数据访问框架(12)-- 将DataRabbit融入架构 文中介绍了如何将DataRabbit和 3层架构结合起来但是在实际项目中每层是如何使用DataRabbit了?本文将展示作者在项目中使用DataRabbit标准做法  我们以CompanyUser表和MemberShip表为例介绍说明如下:  比如我们有个虚构业务流程(仅用于举例)如下:根据UserID找到对应M... [阅读全文]

orm框架:DataRabbit 轻量的ORM框架(18)-- 捕获数据库访问异常的详细信息

最新版本DataRabbit(版本号:V3.2)新增项重要功能--可以捕获访问数据库时产生异常详细信息包括:异常对象、Sql语句、sql参数名称和值这是由IDBExceptionFilter接口提供支持    /// summary  /// IDBExceptionFilter 用于捕获住DB操作异常可以用于记录DB操作失败时语句和参数  /// /summary  public erface ... [阅读全文]

通信协议:ESFramework介绍的(1)――网络通信消息协议接口IContract

通过网络相互通信系统的间(如客户端和服务端通信)要想正常交互它们必须有“共同语言”这种语言就是消息协议遵守消息协议消息才能被我们系统所理解  我们知道消息在网路上传输是字节流而我们主流面向对象系统中处理却是“对象”如何将从网络上接收到字节流转化为“对象”又如何将“对象”转化为字节流以便通过网络传递给其他... [阅读全文]

网络通信:ESFramework介绍的(2)――网络通信消息NetMessage

较的C而言.NET是个更加“动态”平台其动态能力建立在反射机制的上而反射基础是“元数据”  上文已经提到过如果个框架要为我们应用做更多事情那么这个框架必须建立更多标准必须对框架自己要处理消息有更多了解所以每个消息都要是自描述也就是说每个消息要包含它自己“元数据”那么“元数据”位于消息何处了?你定想到了对... [阅读全文]

ESFramework介绍的(3)――消息处理器和处理器工厂

无论是服务端还是客户端都需要对接收到消息进行处理在ESFramework框架中处理消息组件称为消息处理器所有消息处理器都实现了接口IDataDealer:25         {26           (IDataDealer)addin ;27         }28       }2930       null;31     }3233     #endregion34   }  上面讲... [阅读全文]

ESFramework介绍的(4)――消息拦截器INetMessageHook

网络上传输消息经常是经过加密和压缩有特定类型消息可能还需要进行其它变形ESFramework通过INetMessageHook对这些功能提供支持需要介绍说明是ESFramework对消息进行截获(Hook)处理有两种方式是仅仅Hook处理消息主体(Body)而不对消息头作任何变换;另种方式是对整个消息(包括消息头和主体)都进行Hook处理通常第种方式已经能够满足我们大多数应用并且效率也更高如果应用... [阅读全文]

ESFramework介绍的(5)――消息分派器IMessageDispatcher

本来Tcp/udp组件是系统和外界交换消息唯进出口而Tcp组件或Udp组件和我们系统唯联系是通过消息分派器IMessageDispatcher如此来就相当于ESFramework规定了消息分派器是我们应用和外界交换消息进出口IMessageDispatcher是和协议无关、宿主无关组件即它即可以在使用于TCP协议也可使用于Udp协议如果使用Remoting方式通信也可以使用IMessageDisp... [阅读全文]

ESFramework介绍的(6)―― 基于C/S的4层架构概述

ESFramework4层结构4层分别是:客户端(Client)、应用服务器(AS)、功能服务器(FS)、数据库服务器它们的间联系图示意如下:4层架构概述" /  图中FunAddin是功能插件这再前文已介绍过了整个体系中终端请求服务主要分为两大类是向应用服务器AS请求功能服务另类是终端和终端的间非功能通信所有功能服务由功能插件(FunAddin)进行处理所有非功能通信由应用服务器处理或中转如果终... [阅读全文]

ESFramework介绍的(7)-- 服务器代理IServerAgent

分布式系统构建般有两种模式是基于消息(如Tcphttp等)是基于思路方法(如RPC、WebService、Remoting)深入想想它们其实是回事如果你了解过.NETProxy那么你会发现思路方法和消息请求/回复实际上是可以相互转换.NETProxy实现就是在堆栈帧和消息的间相互转换过程有关这方面详细论述可以参见.Net本质论书  我觉得IServerAgent是我在开发ESFramework期间... [阅读全文]

数据库框架:DataRabbit 轻量的数据访问框架(02) -- IOrmAccesser

在DataRabbit框架中通过IOrmAccesser来对数据库进行ORM访问只要Entity(即ORM中“O”)定义和数据库表结构完全致即可使用IOrmAccesser来对其进行ORM操作  1.Entity  Entity除了包括成员变量和属性(这些变量和属性和数据库表结构完全致)外不需要包含任何其它元素在轻量数据访问框架 --序例子代码中我们已经看到了个Studen... [阅读全文]

数据库框架:DataRabbit 轻量的数据访问框架(03) -- IOrmAccesser(续)

本文举例源代码或素材下载   本文将接着 DataRabbit 轻量数据访问框架 -- IOrmAccesser 继续介绍IOrmAccesser些高级功能这些高级功能需要DataRabbit.ORM.ISmartEntity接口支持注意对于Entity 来说该接口并不是强制  (1)有关含自增字段Entity插入:  插入后Entity中对应自增字段属性将被正确地赋为数据库中自... [阅读全文]

数据库框架:DataRabbit 轻量的数据访问框架(04) -- IEntityRelationLoader

在DataRabbit框架提供ORM功能的中除了IOrmAccesser接口展现核心ORM功能外IEntityRelationLoader接口也提供了些有意义功能正如其名IEntityRelationLoader是通过数据表主外键关系来加载当前EntityParent和Children  现在对我们前面举例经常用到Student数据表做个扩充假设Student表MentorID字段作为外键指向Me... [阅读全文]

数据库框架:DataRabbit 轻量的数据访问框架(05) -- ITableAccesser

ORM并不能完成所有事情有些数据库访问还是需要基于关系来进行对于那些不提供基于关系进行数据访问操作纯ORM框架我认为是不明智在DataRabbit中基于ORM访问和基于关系进行数据访问各占了半天空这使得我们在无法用ORM达成地方可以转向使用基于关系访问器来达成DataRabbit.Relation命名空间下类和接口用于提供基于关系数据库访问操作主要包括:针对数据库Relation访问器(IRela... [阅读全文]

数据库框架:DataRabbit 轻量的数据访问框架(06) -- IRelationAccesser

前面介绍IOrmAccesser是对单表进行ORM访问而ITableAccesser是对单表进行基于关系访问如果我们要进行联合查询这样跨表搜索则使用它们就无法达成目标这时你可以使用IRelationAccesser和IOrmAccesser和ITableAccesser针对性区别(它们针对数据库中某个表)IRelationAccesser针对是整个目标数据库在DataRabbit中所有跨表操作推荐... [阅读全文]

数据库框架:DataRabbit 轻量的数据访问框架(07) -- ISPAccesser

虽然IRelationAccesser可以些不含out参数存储过程但是在DataRabbit中存储过程最好是通过ISPAccesser接口来进行  存储过程不仅可以有返回值还可以有[in,out]参数在对存储过程进行封装的前首先必须抽象存储过程参数表示DataRabbit使用SPParameter来表示存储过程参数          spAccesser.ExcuteNoneQuery("Copy... [阅读全文]

数据库框架:DataRabbit 轻量的数据访问框架(08) -- DataRabbit 的入口点:TransactionScopeFactory和TransactionScope

有关TransactionScopeFactory首先要提醒以下几点:  (1)TransactionScopeFactory是DataRabbit框架入口点所有访问器、分页管理器、大纲操作者都可以从TransactionScopeFactory生成TransactionScope(事务范围)处获取  (2)TransactionScopeFactory针对是个数据库对于个特定数据库应用只需要维护... [阅读全文]
<< < 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 > >> 共1602条 分54页