現(xiàn)在網(wǎng)絡的流行,使得服務器程序得到了廣泛的應用,那么我們使用Delphi如何設計出強壯的服務器呢? 有人說,如果要設計服務器的話,一定要使用VC來設計,其實這個人說的有一定道理,因為如果你要使用Delphi來設計服務器的話,要想設計高效的服務器就不要使用Delphi帶來的大部分的控件(最好不要使用Delphi控件),為什么呢?下面我會告訴大家。這樣的話你全部使用API來設計服務器,就同VC沒有太大的區(qū)別了。 使用Delphi來設計服務器程序,具體選擇是使用窗體消息模式還是使用完成端口的模式,這主要看你的用戶連接數(shù)量來決定。如果你的用戶連接數(shù)量小于1000人的話,并且處理的數(shù)據(jù)量不大的話,可以使用窗體的消息模式來進行服務器的開發(fā),而如果大于1000,這樣最好使用完成端口來開發(fā)服務器。我這里建議大家最好使用完成端口模式,因為你不可能保證你的用戶數(shù)量不變化,同時由于你的服務器如果運行一段時間沒有問題的話,最好做成WIN 的服務程序,這樣可以保證后期的維護比較少。 現(xiàn)在介紹你在開發(fā)Delphi服務器的時候需要注意地方: 1 不要在程序中使用String變量 這個也是在實際的開發(fā)過程中發(fā)現(xiàn)的,我最開始開發(fā)的時候,為了簡單一些,就大量使用String變量來開發(fā)程序,但程序總是在運行一段時間后出現(xiàn)問題,后來查原因也不太清楚,到網(wǎng)上查資料,發(fā)現(xiàn)有人介紹不要使用String來做變量,將自己的程序全部修改成數(shù)組問題就基本解決了。 2 使用快速的加密算法如XOR 加密或DES加密等算法 服務器在與客戶端傳遞的時候一定要進行加密,但使用什么類型的加密算法呢?不要使用那種需要大量運算的算法如RSA等算法,最好使用XOR加密或DES換位加密算法,這樣主要是滿足普通的加密密文的要求,又保證服務器的運算速度。你也可以使用RSA加密密文,但這會造成服務器處理變慢,而如果遇到大量的處理時候,很容易服務器就拒絕服務器。 3 使用原ADO函數(shù)來連接數(shù)據(jù)庫 服務器程序通常都與數(shù)據(jù)庫想結合,那么使用Delphi開發(fā)的時候,通常使用ADO的控件來制作,但如果你學習ADO手冊會發(fā)現(xiàn),對于服務器其實不需要控件來完成數(shù)據(jù)的操作??梢灾苯邮褂肁DO相應的函數(shù)來完成。主要因為服務器程序與數(shù)據(jù)庫通常都是比較簡單的操作,沒有很復雜的。所以使用原ADO模式就可以了。這樣也減少由于ADO控件帶來的問題。 4 應多使用“池” 5 熟練使用指針操作 6 多使用WSASend,WSARecv等WinSocket 2函數(shù),不要使用Send,Recv函數(shù) 7 合理使用線程池操作 8 如果服務器使用了“池”的概念,這就又出現(xiàn)了一個問題,如何高效的分配池呢? 9 使用高效的字符串操作函數(shù) 10 優(yōu)化你的SQL查詢語句 上面介紹是我的實踐經(jīng)驗,不一定全對,希望大家能有幫助。如果有更好的方法,也可以討論。 |
|