摘要:
使用DataReader进行数据分页有个好处就是简单和通用,不需要关心数据相关细节;由于在客端进行数据分页因此可以适用于所有数据库.虽然DataReader进行数据分页简单方便,但它所适用的场景只是经过条件筛选后的少量数据进行分页处理,但有于ado.net相关实现的一些细节上即在对少量数据进行分页在处理还是有些地方注意. 一般我们使用DataReader通过while(reader.Read())来得到相对区间的数据,然后调用对应的Command.Cancel()方法和reader.Close进行一个结束处理.但通过测试的情况来看这两个操作并达不到我们需要的效果.调用以上两个方法也无可避... 阅读全文
摘要:
其实实现一个图片验证码并不是什么难的问题,主要讲究的时验证的实现上如何提高程序的识别难度.所以在实现过程参考了一下google的做法,由于数字或字母适当重叠对人自身识别并不成什么问题,但对于计算增加的难度相对来说就比较高些了.如果感觉难度不大可以调整一下程序让让字母之间紧靠的近一点,也可适当地加下曲线来让分析上更难.不过做得太过的话,估计人自己都搞不清楚了:)验证码效果具体实现代码using System;using System.Collections.Generic;using System.Drawing;using System.Drawing.Drawing2D;using Syst 阅读全文
摘要:
Flash是现有网页中最流行的富客户端表现软件,所以组件支持Flash对象协议通讯也是非常有必要的事情.由于组件可以通过扩展协议分析器来兼容不同协议处理,所以可以通过使用FluorineFx就可以简单地实现基于AMF3的协议和Flash进行TCP通讯.如果有了解之前的Protobuf的扩展,那扩展AMF3也是很简单的事情.定义协议格式同样在交互前要明确一下协议的格式先,只有这样才可以方便的进行代码编写实现.协议比较简分别消息总长度和内容,内容即是AMF3协议数据.实现具体的分析器和消息适配器协议制定后就可以进行分析器的实现,采用头4字节描述大小,所以分析器从HeadSizeOfPackage基 阅读全文
摘要:
Protobuf是google制定的一种对象序列化格式,而在.net下的实现有protobuf-net.而protobuf-net在序列化方面有着出色的性能,效率是.net二进制序列化几倍,而序列化后所占的空间也少于.net二进制序列化;除了以上两个优势外Protobuf有着一个更大的优势就是和其他平台交互的兼容性,在现有大部分流行的语言平台中基本都有Protobuf的实现.因此采用protobuf进行对象序列化是个不错的选择.接下来详细讲解Beetle实现对protobuf-net支持.定义协议格式为了保证TCP数据流正确处理,首先要做的事情还是要制定一个处理协议,来保证数据处理的有效性.. 阅读全文
摘要:
完全通过组件对象描述的方式来完成所有数据库操作是不太现实的事情,所以组件提供SQL和存储过程的执行支持.随着组件版本的不断完善在1.7后组件在使用SQL和存储也是一件极其方便的事情.其简洁的操作方式相信在其他数据访问组件中难以体验到.SQL处理组件提供一个SQL对象用于直接处理SQL语句,由于重写了运算符,所以对象可以直接通过string来进行初始化. SQL sql = "delete from employees where employeeid=@p1";SQL是组件1.7开始提供的对象,它提供以下基础操作方法int Execute()获取受影响的行数,一般用于执行i 阅读全文
摘要:
当写完一个TCP服务的时候,是不是很想马上测试一下这个服务的性能,它到底能应付怎样的请求处理,其性能又是怎样呢.相信以下这个小工具能帮到你的小忙,它是基于Beetle实现的一个小工具只需要设置一下参数就能对一个TCP服务进行一个简单的吞吐性能测试.这个小工具可以设置发送的数据内容,连接的数量.其测试流程是连接先向服务器发送指定的数据,等服务回应后进入下一次请求.工具可以看到每个连接的简单信息,包括:上一次请求应答延时,最大延时,最小延时和接收发送字节数.工具状态栏下面是一个总体处理情况.如果工具发送接收处理不能满足你的需要,还可以通过修改代码来达到你想要的情况.(工具是完全用.net实现,所以 阅读全文
摘要:
借助于扩展方法的功能,这一版本的改进可以让数据库操作变得更简单方便,在数据库操作相关会给你一种全新的体验.主要改进有以下几点:条件表达式可以直接和string进行组合,从而更灵活地创建复杂的查询条件扩展Load_方法,可以直接在值对象的基础上获取相关ID数据对象扩展一系的查询方法,可直接在string的sql上进行数据操作,包括查询获取查询对象数据.在操作过程完全不需要借助于其他对象来处理.扩展可以直接在存储过程对象进行执行操作以上的一系列扩展都是直接能操作数据,而不再需引用相关条件对象或数据库上下文对象,让数据操作变得更简单灵活.对象获取和保存 var emp = 3.Load_<Em 阅读全文
摘要:
组件发送的对象都必须实现IMessage接口,通过实现接口来描述一个对象的序列化过程;自定义读写流的好处就是可以得到更好的性能,但缺点也相对明显的就是工作量比较多.在很多应用场合下所追求的并不是性能第一,而是希望省下这些烦锁的工作,为了应付这种需要组件可以实现一个简单的消息适配器来完成这样的功能.下面通过扩展的方式来实现组件对.net二进制序列化对象转输的支持.定义协议格式在TCP下进行数据交互通讯首先是要制定一个通讯的应用协议,由于组件提供基于结束符和头大小描述的基础分析器,可以从这基础分析协中派生下来.似下通过一个图来描述协议的具体细节协议描述比较简单消息头是4个字节用于存储消息的总长度, 阅读全文
摘要:
在处理TCP数据的时候我们需要考虑一个粘包的问题,所谓的粘包就是本次接收的数据不一定完整对应对方发送的数据.对方发送的一次数据有可能需要接收多次才能完成,实际要处理的情况要复习一点;为了解决点包问题所以必须要制订数据分析协议来处理,常用的解决方法有两种:一种是基于结束符的方式,而另一种则是在消息头通过一个4字节存储消息大小.分包注意细节虽然制定处理粘包的方法,但这两种方法在处理上还是要注意几种情况,以下通过一个图来表达几种情况的处理.其实最主要关心的是就是分隔符或头描述的内容分别存放在两次receive的数据中.实现一个简单的协议分析器组件提供以上两种分包处理方式,基础类分别是Head... 阅读全文
摘要:
使用Beetle构建TCP服务应用是件非常简单的事情,它并不需要你去关注Socket细节,如果你想用Socket编写高性能的TCP服务,那你要关注的东西非常多,异步数据处理,大量连接下的线程管理和连接断相关资源处理等等复杂的事情;使用Beetle那以上的事情完全都可以不用关心,因为Beetle都已经帮你处理好.而你需要做的只需要简单的定义相关对象和绑定相关处理事件即可.以下是通过Beetle实现一个简单的TCP服务配置在使用组件的需要对组件进行初始,可以在配置文件进行实始化信息配置 <configSections> <section name="beetle&quo 阅读全文