Delphi2010中DataSnap高階技術(7)—TDSServerClass中Lifecycle生命週期三種屬性說明

非常老帥發表於2011-01-11

Lifecycle 三種屬性: Session、Invocation、Server

這三種屬性都用在什麼情況,有什麼要注意的事項,Delphi2010中罕有說明。

如果亂用這三種屬性,你的服務程式有可能崩潰,資料混亂,記憶體佔用大,效率低等問題!

下面我對這三種屬性的使用環境逐一介紹:

1. Session

說明:這是delphi2010中預設屬性,也是delphi推薦設定。Session會為每個來自客戶端的連結,建立一個執行緒來例項化。例項化是什麼概念呢?就是這個執行緒把所有你將要用到的類、函式等等都建立好了,等待你客戶端直接使用。這個執行緒和例項化並不釋放,直到客戶端中斷連線。如果有300個客戶端,那麼你的伺服器將會有300執行緒和例項,對伺服器硬體和記憶體是個考驗。

適用環境:這個設定是執行緒安全的!

•客戶端數量少,每臺伺服器不超過連線數量: 200 x CPU個數 x (每個CPU核數x0.7) (這是經驗值,穩定連線的數量,不是極限數量,別誤解^_^),記憶體現在很便宜了,想加多大就多大!
•客戶端頻繁呼叫伺服器資料,無論連線數量是多少,最好都用這種設定。如果客戶端很多,建議採用負載平衡和多臺伺服器來解決。
2. Invocation

說明:伺服器只是建立連線,但是先不做例項化,只有當客戶端請求功能的時候,伺服器才開執行緒並例項化,當客戶端用完後,伺服器就釋放執行緒和例項。

 適用環境:這個設定是執行緒安全的!

•如果客戶端呼叫伺服器資料頻率低,這種方法很不錯,會節約很多記憶體。
3. Server

說明:伺服器對所有客戶端連線使用一個例項,不是執行緒安全的。所以要自己控制客戶端併發呼叫的問題(可以使用互斥、原子量等方法),讓客戶端的呼叫排成一隊使用伺服器資源。

 適用環境:這個設定不是執行緒安全的!!

•配置較低的伺服器
•伺服器連線的另一端只能是單執行緒工作的模式

本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/sunstone/archive/2010/02/02/5282666.aspx


相關文章