在XE3中,我們可以考濾用DataSnap開發多層應用。
本記錄主要查看DataSnap服務端連接及斷開事件,這樣能更好的理解服務端如何進行控制,即主要了解以下圖中幾個控件的事件觸發順序。
以上幾個控件作用說明:
DSSerever:提供基本的DataSnap服務功能
DSTCPServerTransport:提供TCP/IP通訊協議的支持,http(s)用不上
DSHTTPService:提供http(s)通訊協議和RESTFUL架構的基本支持
DSAuthenticationManager:提供安全認證的功能
DSServerClass:提供自動輸出的服務端類別讓客戶端調用的基本功能,它是TDSServerModule的類別
以下為實例的服務端和客戶端截圖:
服務端:
客戶端:
以下為分別為遠程連接和斷開時的事件順序圖,如果不是tcp/ip協議,則服務端不會執行DSTCPServerTransport的事件。
遠程連接事件執行順序
遠程斷開執行順序
后記:
根據以上的順序,我們在開發服務端時可以在服務端建立數據庫連接池,在DSServer的連接事件中一給用戶分配數據庫的連接,在斷開事件中把分配給用戶的數據庫連接放回連接池即可。
在用到DSTCPServerTransport的心跳包時,發現如果是tcp/ip連接協議,在心跳包的特定時間內沒有回應時,服務端會自動調用DSTCPServerTranspor的DisConnect事件,但不會執行DSServer的disconnect.而http則沒有什么反應。
綜上所述,我們在開發中間層時,在DSServer中給用戶分配數據庫連接池,可以把sqlconnection\adoconnection\uniconnection等連接的控件放在ServerContainer窗體中,其它的連接控件如uniDataSet\AdoDataSet\DataSetProvider等放在TServerMethods(TDSServerModule)的窗體上.
客戶端在連接時最好在調用某個事件時就打開客戶端的sqlconnection,調用完后就斷開客戶端的sqlconnection即可。
服務端的最大連接數與cpu有關系,好像是200*cup的核數*系數
以上不對的地方請指正
源碼地址:http://download.csdn.net/detail/yagzh2000/5294600