服务器

位置:IT落伍者 >> 服务器 >> 浏览文章

如何使用Delphi设计强大的服务器程序


发布日期:2020年05月10日
 
如何使用Delphi设计强大的服务器程序
现在网络的流行使得服务器程序得到了广泛的应用那么我们使用Delphi如何设计出强壮的服务器呢?

有人说如果要设计服务器的话一定要使用VC来设计其实这个人说的有一定道理因为如果你要使用Delphi来设计服务器的话要想设计高效的服务器就不要使用Delphi带来的大部分的控件(最好不要使用Delphi控件)为什么呢?下面我会告诉大家这样的话你全部使用API来设计服务器就同VC没有太大的区别了

使用Delphi来设计服务器程序具体选择是使用窗体消息模式还是使用完成端口的模式这主要看你的用户连接数量来决定如果你的用户连接数量小于人的话并且处理的数据量不大的话可以使用窗体的消息模式来进行服务器的开发而如果大于这样最好使用完成端口来开发服务器我这里建议大家最好使用完成端口模式因为你不可能保证你的用户数量不变化同时由于你的服务器如果运行一段时间没有问题的话最好做成WIN 的服务程序这样可以保证后期的维护比较少

现在介绍你在开发Delphi服务器的时候需要注意地方

不要在程序中使用String变量

这个也是在实际的开发过程中发现的我最开始开发的时候为了简单一些就大量使用String变量来开发程序但程序总是在运行一段时间后出现问题后来查原因也不太清楚到网上查资料发现有人介绍不要使用String来做变量将自己的程序全部修改成数组问题就基本解决了

使用快速的加密算法如XOR 加密或DES加密等算法

服务器在与客户端传递的时候一定要进行加密但使用什么类型的加密算法呢?不要使用那种需要大量运算的算法如RSA等算法最好使用XOR加密或DES换位加密算法这样主要是满足普通的加密密文的要求又保证服务器的运算速度你也可以使用RSA加密密文但这会造成服务器处理变慢而如果遇到大量的处理时候很容易服务器就拒绝服务器

使用原ADO函数来连接数据库

服务器程序通常都与数据库想结合那么使用Delphi开发的时候通常使用ADO的控件来制作但如果你学习ADO手册会发现对于服务器其实不需要控件来完成数据的操作可以直接使用ADO相应的函数来完成主要因为服务器程序与数据库通常都是比较简单的操作没有很复杂的所以使用原ADO模式就可以了这样也减少由于ADO控件带来的问题

应多使用

服务器在设计的过程一定要大量的变量支持如果不使用池这个概念你的程序将在创建和释放变量过程中浪费大量的时间而且容易出现问题设计过程中尽量不要创建和释放变量如果能考虑到的变量都在开始的运行的时候创建完毕这样可以加快程序的运行速度减少沖突具体如何使用池这个技术以后有时间再考虑写一篇介绍一下

熟练使用指针操作

如果你不熟悉指针操作那么你几乎无法设计出高效的服务器如果你要真正的理解指针的概念对于设计服务器来说就是如虎添翼

下面举个例子如使用Recv接收数据到Buffer中后你需要进行解密操作你可以使用下面的方法进行

var

ab:array [] of byte;

i :integer;

ResultBuffer :array [Max] of byte;

begin

for i := to Sizeof(Buffer) div do

begin

move(Buffer[(i)*+]a);

Des(abtrue);//这里使用DES加解密处理

move(bResultBuffer[(i)*+]);

end;

end

大家看一看上面的代码思路很清楚就是将接收到的Buffer分别按个提到变量a中再使用DES解密算法解密成b再放回ResultBuffer中

如果你熟练使用指针的话效率会极大的提高

var

ab:Pbyte;

i :integer;

ResultBuffer :array [Max] of byte;

begin

for i := to Sizeof(Buffer) div do

begin

a := @Buffer[(i)*+];

b := @ResultBuffer[(i)*+]

Des(a^b^true);//这里使用DES加解密处理

end;

end

再看一看上面的代码是不是少了两个Copy数据的过程这就是指针给你带来的高效

多使用WSASendWSARecv等WinSocket 函数不要使用SendRecv函数

这个主要看你的服务器运行在什么系统中了如果运行在WIN系统里最好使用WSA系统的函数因为Microsoft毕竟将它们都优化了

合理使用线程池操作

高效的服务器一定要使用线程池技术使用多少线程合理需要线程处理什么样的数据我个人认为如果要使用线程池的技术一定要处理那些最费时的操作如数据库的查询操作

如果服务器使用了的概念这就又出现了一个问题如何高效的分配池呢?

我在程序中大量的使用池如线程池数据池等当数据到达的时候如何分配池呢?这里就不告诉大家了以后再专门写一篇关于池的文章详细的介绍如何使用池大家也可以自己考虑一下

使用高效的字符串操作函数

因为服务器一定要进行大量的字符串运行如果使用Delphi自带的函数来操作就比较费时所以这里推荐大家使用QStringspas字符串操作函数集相信会对大家有帮助的

优化你的SQL查询语句

你可以一方面优化SQL查询语句来提高运行效率另一方面你还可以使用存储过程来更大的提高运行效率               

上一篇:仅允许指定的机器连接SQL Server服务器

下一篇:如何使用Delphi设计强大的服务器程序[1]