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