DataSnap控件TDSServerClass属性LifeCycle生命周期管理(From李维)

DelphiXE2中的DataSnap中提供了三种不同的生命周期,开发人员可以在TDSServerClass控件的LifeCycle特性中设定,下面分别说明每一种生命周期的意义

    1. Server:在整个DataSnap服务端中只会建立一个服务端类别对象以服务所有的用户端,只有当DataSnap服务器结束

                    才会释放该服务类别对象

    2. Session:在DataSnap服务器中会为每一个连接的用户端建立一个专属的服务类别对象服务此用户端,移动用户端结束

                      或是关闭TSQLConnection的连接,此服务类别对象便会释放

    3. Invocation: 在DataSnap服务器中没当用户端执行一次请求时,在DataSnap服务器便会为这个请求建立一个服务器

                           类别对象服务此用户端请求,当请求执行结束后,DataSnap服务器便会释放此服务类别对象

从上面的说明中我们可以了解,使用Server生命周期的服务端服务类别只会在DataSnap服务器中建立一个服务对象,使用Session生命周期的服务端服务类别则视用户端使用多少TSQLConnection控件藉由DataSnap驱动程式连结到DataSnap服务器的数目而在DataSnap服务器中建立相对应的服务对象来服务服务,最后使用Invocation生命周期的服务端服务类别则会在每一次用户端呼叫DataSnap服务器时被建立来服务用户端,因此被建立和释放的次数相当巨量

那么开发人员应该如何决定使用哪一种的生命周期服务端服务类别呢?这当然要看服务端服务类别香袋的服务各类,下面的表格简单的说明了每一种生命周期适用的场景:

    1。Server:提供所有用户端公用的服务,由于所有用户端都使用单一的服务端服务类别对象,因此使用这种生命周期的

                     服务对象负荷都比较大,使用这种生命周期的服务对象适合提供快速,简单,无状态的服务为主。

    2。Session:由于这种生命周期形态的服务端服务类别对象会每一个用户端的连结建立一个专属的服务对象,因此可提

                      供用户端无状态以及有状态的服务,也可提供长期,负荷较大的服务。

    3。Invocation:这种生命周期形态的服务端服务类别对象只存在于每一个用户端的呼叫周期,因此适合提供可在背景

                          执行的服务,或是执行资料库的预储程序,或是批次处理等和用户端较无相关的服务。不过由于使用

                          这种生命周期的服务类别会被频繁的建立和释放,因此这种服务类别应该尽量精简。如果需要使用资

                          料库,那么也应该搭配使用dbExpress的连结池功能以加快服务速度。

原文地址:https://www.cnblogs.com/s502/p/3238301.html