最好做成WIN 的服务程序

时间:2022-06-18 06:58:15

此刻网络的风行,使得处事器措施得到了广泛的应用,那么我们使用Delphi如何设计出强壮的处事器呢?

有人说,如果要设计处事器的话,必然要使用VC来设计,其实这小我私家说的有必然原理,因为如果你要使用Delphi来设计处事器的话,要想设计高效的处事器就不要使用Delphi带来的大部分的控件(最好不要使用Delphi控件),为什么呢?下面我会报告大家。这样的话你全部使用API来设计处事器,就同VC没有太大的区别了。

使用Delphi来设计处事器措施,具体选择是使用窗体动静模式还是使用完成端口的模式,这主要看你的用户连接数量来决定。如果你的用户连接数量小于1000人的话,并且措置惩罚惩罚的数据量不大的话,可以使用窗体的动静模式来进行处事器的开发,而如果大于1000,这样最好使用完成端口来开发处事器。我这里建议大家最好使用完成端口模式,因为你不成能保证你的用户数量不乱革,同时由于你的处事器如果运行一段时间没有问题的话,最好做成WIN 的处事措施,这样可以保证后期的维护对照少。

此刻介绍你在开发Delphi处事器的时候需要注意处所:

1 不要在措施中使用String变量

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

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

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

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

处事器措施凡是都与数据库想结合,那么使用Delphi开发的时候,凡是使用ADO的控件来制作,但如果你学习ADO手册会发明,对付处事器其实不需要控件来完成数据的操纵。可以直接使用ADO相应的函数来完成。主要因为处事器措施与数据库凡是都是对照简单的操纵,,没有很庞大的。所以使用原ADO模式就可以了。这样也减少由于ADO控件带来的问题。

4 应多使用“池”
处事器在设计的过程,必然要大量的变量撑持,如果不使用池这个观点,你的措施将在创建和释放变量过程中浪费大量的时间。而且容易呈现问题。设计过程中尽量不要创建和释放变量,如果能考虑到的变量,都在开始的运行的时候创建完毕。这样可以加快措施的运行速度,减少斗嘴。具体如何使用池这个技术,以后有时间再考虑写一篇介绍一下。

5 熟练使用指针操纵
如果你不熟悉指针操纵,那么你几乎无法设计出高效的处事器,如果你要真正的理解指针的观点,对付设计处事器来说就是如虎添翼。
下面举个例子,如使用Recv接收数据到Buffer中后,你需要进行解密操纵,你可以使用下面的要领进行:
var
  a,b:array [1..8] of byte;
  i :integer;
  ResultBuffer :array [1..Max] of byte;
begin
  for i := 1 to Sizeof(Buffer) div 8 do
  begin
    move(Buffer[(i-1)*8+1],a,8);
    Des(a,b,true);  //这里使用DES加解密措置惩罚惩罚
    move(b,ResultBuffer[(i-1)*8+1],8);
  end;
end
大家看一看,上面的代码,思路很清楚,就是将接收到的Buffer分袂按8个提到变量a中,再使用DES解密算法解密成b,再放回ResultBuffer中。
如果你熟练使用指针的话,效率会极大的提高
var
  a,b:Pbyte;
  i :integer;
  ResultBuffer :array [1..Max] of byte;
begin
  for i := 1 to Sizeof(Buffer) div 8 do
  begin
    a := @Buffer[(i-1)*8+1];
    b := @ResultBuffer[(i-1)*8+1]
    Des(a^,b^,true);  //这里使用DES加解密措置惩罚惩罚
  end;
end
再看一看上面的代码,是不是少了两个Copy数据的过程,这就是指针给你带来的高效。

6 多使用WSASend,WSARecv等WinSocket 2函数,不要使用Send,Recv函数
这个主要看你的处事器运行在什么系统中了,如果运行在WIN系统里,最好使用WSA系统的函数,因为Microsoft终究将它们都优化了。

7 合理使用线程池操纵
高效的处事器必然要使用线程池技术,使用几多线程合理,需要线程措置惩罚惩罚什么样的数据。我小我私家认为如果要使用线程池的技术,必然要措置惩罚惩罚那些最费时的操纵,如数据库的盘问操纵。