Session Idle Time 該如何實作??? |
尚未結案
|
eric_shi
一般會員 發表:5 回覆:19 積分:4 註冊:2002-07-20 發送簡訊給我 |
|
change.jian
版主 發表:29 回覆:620 積分:439 註冊:2003-06-02 發送簡訊給我 |
to eric_shi:
可否說明一下你為何會希望要能釋放該ApServer 對 DB 的 Session? 這個範例,就是Borland用來示範如何做到所謂的connection pooling的功能.程式先對db做好連線的動作,然後,當client端有需要連接資料庫時,apserver就會從這些已連線的session中,找一條沒有在用的給client端,用完了再放回去. 會有這樣的設計機制,是希望省去對db的login動作,因為做一個資料連線,需要登入帳號,密碼,資料庫需要一些反應時間.不要讓每個client端都需要花這個時間去做資料庫登入的動作,可以增加client端的反應速度,這就是 connection pooling的精神.
|
eric_shi
一般會員 發表:5 回覆:19 積分:4 註冊:2002-07-20 發送簡訊給我 |
其實在 DB 上的每一 Session 都會佔用一定的資源,
所以我希望在兩面兼顧的情況下,
能夠有 connection pooling 及 DB 的資源精簡; 再提一相關問題,
如果我想做到每一 ApServer 最多只能有 15 個 Session,
Client 為無狀態,所以每次有需求才向 ApServer 要一 Session,
但當 Client 的動作完畢,就釋放該 Session,
當 Session 滿時,則設一 TimeOut,
不知這樣該如何實在才好??? 希望各位前輩高手能多多指教!!!
|
change.jian
版主 發表:29 回覆:620 積分:439 註冊:2003-06-02 發送簡訊給我 |
1.在原來的source code中,即有設定最多只能有15個session
constructor TPoolManager.Create; begin FRDMList := TList.Create; FCriticalSection := TCriticalSection.Create; FTimeout := 5000; FMaxCount := 15; //<--這裡就是控制最多只能有15個connection的地方 FSemaphore := CreateSemaphore(nil, FMaxCount, FMaxCount, nil); end;2.每次有需求才向 ApServer 要一 Session,但當 Client 的動作完畢,就釋放該 Session. 該程式本來就是這樣設計的,你可以看一下TPoolManager.LockRDM及TPoolManager.UnlockRDM這兩個function/procedure裡的內容就知道了.在function LockRDM裡,會先找已經存在的session有沒有沒有在用的,如果都沒有,才會呼叫CreateNewInstance建立一個新的session.而UnlockRDM則會把該session使用中的標記清除(藉由呼叫ReleaseLock來完成) 引言: 其實在 DB 上的每一 Session 都會佔用一定的資源, 所以我希望在兩面兼顧的情況下, 能夠有 connection pooling 及 DB 的資源精簡; 再提一相關問題, 如果我想做到每一 ApServer 最多只能有 15 個 Session, Client 為無狀態,所以每次有需求才向 ApServer 要一 Session, 但當 Client 的動作完畢,就釋放該 Session, 當 Session 滿時,則設一 TimeOut, 不知這樣該如何實在才好??? 希望各位前輩高手能多多指教!!! |
eric_shi
一般會員 發表:5 回覆:19 積分:4 註冊:2002-07-20 發送簡訊給我 |
|
Ktop_Robot
站務副站長 發表:0 回覆:3511 積分:0 註冊:2007-04-17 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |