DataSnap 的服务器对象的生命周期依赖于DSServerClass组件的设置
当DSServer启动时从DSServerClass组件读取LifeCycle属性的值
注意:LifeCycle的值由于在启动时就已经读取 启动后再修改LifeCycle的值将没有任何效果
LifeCycle属性的值可以是以下三种字符串之一
1.Session
该选项为默认设置
每个连接都会建立一个独立的服务器对象为客户端提供服务,服务器对象在连接关闭后释放
因此多个客户端访问的是不同的服务器对象,是线程安全的
2.Invocation
对于每次服务端方法调用建立一个独立的服务器对象为客户端提供服务,服务器对象在调用结束后释放
这个同样也是线程安全的
但是每次调用都创建和释放服务器对象对于频繁调用的系统影响很大,如果把服务端对象用对象池管理配合此种方式将是个非常不错的解决方案
3.Server
所有的客户端使用同一个服务端对象,也就是该对象是单例的
需要开发人员自己来进行同步的控制,不是线程安全的
在服务端对象创建和释放时将触发DSServerClass的两个重要的事件OnCreateInstance和OnDestroyInstance
在这里我们可以使用自定义创建和释放服务器对象 同样我们可以用于服务端对象池
下面我们把上一次的DEMO稍微改动下来观察下服务端对象的生命周期
我们先将DSServer组件的AutoStart设置为False 然后拖上两个Button分别完成Start和Stop的调用