日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

如何使用Delphi設(shè)計(jì)強(qiáng)大的服務(wù)器程序

 aaie_ 2011-12-03

現(xiàn)在網(wǎng)絡(luò)的流行,使得服務(wù)器程序得到了廣泛的應(yīng)用,那么我們使用Delphi如何設(shè)計(jì)出強(qiáng)壯的服務(wù)器呢?

有人說(shuō),如果要設(shè)計(jì)服務(wù)器的話,一定要使用VC來(lái)設(shè)計(jì),其實(shí)這個(gè)人說(shuō)的有一定道理,因?yàn)槿绻阋褂肈elphi來(lái)設(shè)計(jì)服務(wù)器的話,要想設(shè)計(jì)高效的服務(wù)器就不要使用Delphi帶來(lái)的大部分的控件(最好不要使用Delphi控件),為什么呢?下面我會(huì)告訴大家。這樣的話你全部使用API來(lái)設(shè)計(jì)服務(wù)器,就同VC沒(méi)有太大的區(qū)別了。

使用Delphi來(lái)設(shè)計(jì)服務(wù)器程序,具體選擇是使用窗體消息模式還是使用完成端口的模式,這主要看你的用戶連接數(shù)量來(lái)決定。如果你的用戶連接數(shù)量小于1000人的話,并且處理的數(shù)據(jù)量不大的話,可以使用窗體的消息模式來(lái)進(jìn)行服務(wù)器的開(kāi)發(fā),而如果大于1000,這樣最好使用完成端口來(lái)開(kāi)發(fā)服務(wù)器。我這里建議大家最好使用完成端口模式,因?yàn)槟悴豢赡鼙WC你的用戶數(shù)量不變化,同時(shí)由于你的服務(wù)器如果運(yùn)行一段時(shí)間沒(méi)有問(wèn)題的話,最好做成WIN 的服務(wù)程序,這樣可以保證后期的維護(hù)比較少。

現(xiàn)在介紹你在開(kāi)發(fā)Delphi服務(wù)器的時(shí)候需要注意地方:

1 不要在程序中使用String變量

這個(gè)也是在實(shí)際的開(kāi)發(fā)過(guò)程中發(fā)現(xiàn)的,我最開(kāi)始開(kāi)發(fā)的時(shí)候,為了簡(jiǎn)單一些,就大量使用String變量來(lái)開(kāi)發(fā)程序,但程序總是在運(yùn)行一段時(shí)間后出現(xiàn)問(wèn)題,后來(lái)查原因也不太清楚,到網(wǎng)上查資料,發(fā)現(xiàn)有人介紹不要使用String來(lái)做變量,將自己的程序全部修改成數(shù)組問(wèn)題就基本解決了。

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

服務(wù)器在與客戶端傳遞的時(shí)候一定要進(jìn)行加密,但使用什么類型的加密算法呢?不要使用那種需要大量運(yùn)算的算法如RSA等算法,最好使用XOR加密或DES換位加密算法,這樣主要是滿足普通的加密密文的要求,又保證服務(wù)器的運(yùn)算速度。你也可以使用RSA加密密文,但這會(huì)造成服務(wù)器處理變慢,而如果遇到大量的處理時(shí)候,很容易服務(wù)器就拒絕服務(wù)器。

3 使用原ADO函數(shù)來(lái)連接數(shù)據(jù)庫(kù)

服務(wù)器程序通常都與數(shù)據(jù)庫(kù)想結(jié)合,那么使用Delphi開(kāi)發(fā)的時(shí)候,通常使用ADO的控件來(lái)制作,但如果你學(xué)習(xí)ADO手冊(cè)會(huì)發(fā)現(xiàn),對(duì)于服務(wù)器其實(shí)不需要控件來(lái)完成數(shù)據(jù)的操作??梢灾苯邮褂肁DO相應(yīng)的函數(shù)來(lái)完成。主要因?yàn)榉?wù)器程序與數(shù)據(jù)庫(kù)通常都是比較簡(jiǎn)單的操作,沒(méi)有很復(fù)雜的。所以使用原ADO模式就可以了。這樣也減少由于ADO控件帶來(lái)的問(wèn)題。

4 應(yīng)多使用“池”
服務(wù)器在設(shè)計(jì)的過(guò)程,一定要大量的變量支持,如果不使用池這個(gè)概念,你的程序?qū)⒃趧?chuàng)建和釋放變量過(guò)程中浪費(fèi)大量的時(shí)間。而且容易出現(xiàn)問(wèn)題。設(shè)計(jì)過(guò)程中盡量不要?jiǎng)?chuàng)建和釋放變量,如果能考慮到的變量,都在開(kāi)始的運(yùn)行的時(shí)候創(chuàng)建完畢。這樣可以加快程序的運(yùn)行速度,減少?zèng)_突。具體如何使用池這個(gè)技術(shù),以后有時(shí)間再考慮寫一篇介紹一下。

5 熟練使用指針操作
如果你不熟悉指針操作,那么你幾乎無(wú)法設(shè)計(jì)出高效的服務(wù)器,如果你要真正的理解指針的概念,對(duì)于設(shè)計(jì)服務(wù)器來(lái)說(shuō)就是如虎添翼。
下面舉個(gè)例子,如使用Recv接收數(shù)據(jù)到Buffer中后,你需要進(jìn)行解密操作,你可以使用下面的方法進(jìn)行:
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個(gè)提到變量a中,再使用DES解密算法解密成b,再放回ResultBuffer中。
如果你熟練使用指針的話,效率會(huì)極大的提高
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
再看一看上面的代碼,是不是少了兩個(gè)Copy數(shù)據(jù)的過(guò)程,這就是指針給你帶來(lái)的高效。

6 多使用WSASend,WSARecv等WinSocket 2函數(shù),不要使用Send,Recv函數(shù)
這個(gè)主要看你的服務(wù)器運(yùn)行在什么系統(tǒng)中了,如果運(yùn)行在WIN系統(tǒng)里,最好使用WSA系統(tǒng)的函數(shù),因?yàn)镸icrosoft畢竟將它們都優(yōu)化了。

7 合理使用線程池操作
高效的服務(wù)器一定要使用線程池技術(shù),使用多少線程合理,需要線程處理什么樣的數(shù)據(jù)。我個(gè)人認(rèn)為如果要使用線程池的技術(shù),一定要處理那些最費(fèi)時(shí)的操作,如數(shù)據(jù)庫(kù)的查詢操作。

8 如果服務(wù)器使用了“池”的概念,這就又出現(xiàn)了一個(gè)問(wèn)題,如何高效的分配池呢?
我在程序中大量的使用池,如線程池,數(shù)據(jù)池等。當(dāng)數(shù)據(jù)到達(dá)的時(shí)候,如何分配池呢?這里就不告訴大家了,以后再專門寫一篇關(guān)于池的文章。詳細(xì)的介紹如何使用池。大家也可以自己考慮一下。

9 使用高效的字符串操作函數(shù)
因?yàn)榉?wù)器一定要進(jìn)行大量的字符串運(yùn)行,如果使用Delphi自帶的函數(shù)來(lái)操作,就比較費(fèi)時(shí),所以這里推薦大家使用QStrings.pas字符串操作函數(shù)集,相信會(huì)對(duì)大家有幫助的。

10 優(yōu)化你的SQL查詢語(yǔ)句
你可以一方面優(yōu)化SQL查詢語(yǔ)句來(lái)提高運(yùn)行效率,另一方面你還可以使用存儲(chǔ)過(guò)程來(lái)更大的提高運(yùn)行效率。(這些知識(shí)你需要看數(shù)據(jù)庫(kù)的內(nèi)容,這里具體如何優(yōu)化就不說(shuō)了。) 

上面介紹是我的實(shí)踐經(jīng)驗(yàn),不一定全對(duì),希望大家能有幫助。如果有更好的方法,也可以討論。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多