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

原创 2005年05月30日 15:34:00

现在网络的流行,使得服务器程序得到了广泛的应用,那么我们使用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 合理使用线程池操作
高效的服务器一定要使用线程池技术,使用多少线程合理,需要线程处理什么样的数据。我个人认为如果要使用线程池的技术,一定要处理那些最费时的操作,如数据库的查询操作。

8 如果服务器使用了“池”的概念,这就又出现了一个问题,如何高效的分配池呢?
我在程序中大量的使用池,如线程池,数据池等。当数据到达的时候,如何分配池呢?这里就不告诉大家了,以后再专门写一篇关于池的文章。详细的介绍如何使用池。大家也可以自己考虑一下。

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

10 优化你的SQL查询语句
你可以一方面优化SQL查询语句来提高运行效率,另一方面你还可以使用存储过程来更大的提高运行效率。(这些知识你需要看数据库的内容,这里具体如何优化就不说了。) 

上面介绍是我的实践经验,不一定全对,希望大家能有帮助。如果有更好的方法,也可以讨论。
   
 

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

 http://www.moon-soft.com/doc/51506.htm现在网络的流行,使得服务器程序得到了广泛的应用,那么我们使用Delphi如何设计出强壮的服务器呢?有人说,如果要设计服务器...
  • Devillyd
  • Devillyd
  • 2006年11月02日 16:31
  • 1405

用DELPHI设计代理服务器程序

 摘自《天极网学习中心》 (文/万雪勇)   用Delphi开发串口通信软件一般有两种方法:一是利用Windows的通信API函数,另一种是采用Microsoft的MSComm控件。利用API编写串口...
  • daguocai
  • daguocai
  • 2007年11月13日 23:59
  • 411

Delphi报表控件----SReport3强大易用稳定与最终用户交互良好(新)

  一个是将(商务管理软件)开发人员的报表设计工作量降为零,同时为最终用户提供“简单易用(这很重要)”、“功能强大”、“灵活方便”的报表自定义途径的报表组件。=====================...
  • songlichao
  • songlichao
  • 2001年10月16日 18:22
  • 2036

基于 TCP 协议的并发服务器程序

服务端: #include #include #include #include #include #include #include #include #include #inc...
  • u011641885
  • u011641885
  • 2015年09月06日 22:27
  • 443

分享两款强大的文本编辑器

此前一直在使用  UE  NODpad++ 等有没有。这些用的很卡很卡,误解啊。 自从发现了 sublime  atom 才知道什么叫差距,什么叫飞翔的感觉,就一个字爽啊。 快来认识一下这神一样的...
  • flyingsir_zw
  • flyingsir_zw
  • 2016年11月11日 21:09
  • 1489

基于WSAEventSelect模型的服务器设计

它使用了线程池,可以处理大量的客户I/O请求。设计总体思路比较简单,程序的主线程负责监听客户端的连接请求,接受到新连接后,将新套接字安排给工作线程处理I/O.每个工作线程最多处理64个套接字,如果再有...
  • fuyuehua22
  • fuyuehua22
  • 2014年03月05日 11:06
  • 468

服务器程序的设计方法

服务器程序与客户端程序的不同之处在于Socket的制作方法,因为在服务器程序中要准备好服务器Socket之后等待客户端的连接请求。         在netlock中,要在开始处就生成服务器Sock...
  • u011365209
  • u011365209
  • 2013年09月14日 00:11
  • 437

Delphi 7 中使用Indy创建独立的 Web Services/SOAP 服务器(二)

创建客户端MySOAPClient.exe (an application to consume a web service.) Step by step instructions -- Delph...
  • MaxWoods
  • MaxWoods
  • 2014年05月10日 20:58
  • 2390

delphi基本类的操作

unit CommonFunction; interface uses Windows,DB,ADODB,Controls,Forms,SysUtils,StdCtrls, Classes, strU...
  • wozengcong
  • wozengcong
  • 2014年08月31日 10:27
  • 1009

一个简单的DELPHI程序注册码设计

   当你辛辛苦苦用DELPHI做好了一个你认为十分不错的程序,你是否想把它发布出去成为共享软件呢  做为一个共享软件,注册码肯定是少不了的,你可以通过判断程序是否注册来进行功能,时间或一些其它限制....
  • leoruby
  • leoruby
  • 2007年04月25日 08:41
  • 1301
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何使用Delphi设计强大的服务器程序
举报原因:
原因补充:

(最多只允许输入30个字)