|
Delphi2010中DataSnap高級(jí)技術(shù)(7)—TDSServerClass中Lifecycle生命周期三種屬性說明
Lifecycle 三種屬性: Session、Invocation、Server 這三種屬性都用在什么情況,有什么要注意的事項(xiàng),Delphi2010中罕有說明。
如果亂用這三種屬性,你的服務(wù)程序有可能崩潰,數(shù)據(jù)混亂,內(nèi)存占用大,效率低等問題!
下面我對(duì)這三種屬性的使用環(huán)境逐一介紹:
1. Session
說明:這是delphi2010中默認(rèn)屬性,也是delphi推薦設(shè)置。Session會(huì)為每個(gè)來自客戶端的鏈接,建立一個(gè)線程來實(shí)例化。實(shí)例化是什么概念呢?就是這個(gè)線程把所有你將要用到的類、函數(shù)等等都建立好了,等待你客戶端直接使用。這個(gè)線程和實(shí)例化并不釋放,直到客戶端中斷連接。如果有300個(gè)客戶端,那么你的服務(wù)器將會(huì)有300線程和實(shí)例,對(duì)服務(wù)器硬件和內(nèi)存是個(gè)考驗(yàn)。
適用環(huán)境:這個(gè)設(shè)置是線程安全的!
•客戶端數(shù)量少,每臺(tái)服務(wù)器不超過連接數(shù)量: 200 x CPU個(gè)數(shù) x (每個(gè)CPU核數(shù)x0.7) (這是經(jīng)驗(yàn)值,穩(wěn)定連接的數(shù)量,不是極限數(shù)量,別誤解^_^),內(nèi)存現(xiàn)在很便宜了,想加多大就多大!
•客戶端頻繁調(diào)用服務(wù)器數(shù)據(jù),無論連接數(shù)量是多少,最好都用這種設(shè)置。如果客戶端很多,建議采用負(fù)載平衡和多臺(tái)服務(wù)器來解決。 2. Invocation 說明:服務(wù)器只是建立連接,但是先不做實(shí)例化,只有當(dāng)客戶端請(qǐng)求功能的時(shí)候,服務(wù)器才開線程并實(shí)例化,當(dāng)客戶端用完后,服務(wù)器就釋放線程和實(shí)例。
適用環(huán)境:這個(gè)設(shè)置是線程安全的!
•如果客戶端調(diào)用服務(wù)器數(shù)據(jù)頻率低,這種方法很不錯(cuò),會(huì)節(jié)約很多內(nèi)存。
3. Server 說明:服務(wù)器對(duì)所有客戶端連接使用一個(gè)實(shí)例,不是線程安全的。所以要自己控制客戶端并發(fā)調(diào)用的問題(可以使用互斥、原子量等方法),讓客戶端的調(diào)用排成一隊(duì)使用服務(wù)器資源。
適用環(huán)境:這個(gè)設(shè)置不是線程安全的!!
•配置較低的服務(wù)器
•服務(wù)器連接的另一端只能是單線程工作的模式 本文來自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/sunstone/archive/2010/02/02/5282666.aspx |
|
|