熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Delphi編程 >> 正文

如何使用Delphi設計強大的服務器程序

2013-11-23 17:29:44  來源: 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查詢語句來提高運行效率另一方面你還可以使用存儲過程來更大的提高運行效率
From:http://tw.wingwit.com/Article/program/Delphi/201311/24676.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.