DataSnap探詢


在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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM