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

 

 

posted on 2013-04-24 11:04  天上星  阅读(4510)  评论(3编辑  收藏  举报

导航