二、?DataSnap連接池
連接池
http://docwiki.embarcadero.com/Libraries/XE8/en/Datasnap.DSSession.TDSSessionManager
http://docwiki.embarcadero.com/Libraries/XE8/en/Datasnap.DSSession.TDSSessionManager_Methods
TDSSessionManager::GetThreadSession()->Id
TDSSessionManager.GetThreadSession.PutData('userid', userId);
userId := TDSSessionManager.GetThreadSession.GetData('userid');
DSTCPServerTransport1
KeepAliveTime默認值為300000,也就是300秒,KeepAliveInterval默認值為100,這是啥意思呢。KeepAliveTime是sockfd最后一次通訊后,等待了的時間,如果300秒內沒通訊,socket棧就自己開始發送心跳探測了,如果每次都沒回答,就每隔KeepAliveInterval毫秒問一次。至于問多少次認為是網絡斷開了,根據Windows?OS來定的,windows?2000,?2003是5次,vista以后問10次。也就是說,根據TDSTCPServerTransport的默認設定,網絡斷了,在win7上,要300+0.1*10,也即是301秒才知道網絡斷了。
OS的系統設定更長,沒數據通訊后2小時才開始探測,每隔1秒探測一回。
SIO_KEEPALIVE_VALS值Windows的OS獨有的,Unix還是用SO_KEEPALIVE。
跑題遠了,回到正題。如何監控Session呢,TDSSessionManager提供了方法給你插入監聽事件。
TDSTCPServerTransport.poolsize屬性,默認值是10,大家設置多少
TDSTCPServerTransport.maxThreads屬性,默認值是0,表示線程池內創建線程的個數不設上限