Delphi2010中DataSnap高级技术(7)—TDSServerClass中Lifecycle生命周期三种属性说明

Lifecycle 三种属性: Session、Invocation、Server

这三种属性都用在什么情况,有什么要注意的事项,Delphi2010中罕有说明。

如果乱用这三种属性,你的服务程序有可能崩溃,数据混乱,内存占用大,效率低等问题!

下面我对这三种属性的使用环境逐一介绍:

1. Session

说明:这是delphi2010中默认属性,也是delphi推荐设置。Session会为每个来自客户端的链接,建立一个线程来实例化。实例化是什么概念呢?就是这个线程把所有你将要用到的类、函数等等都建立好了,等待你客户端直接使用。这个线程和实例化并不释放,直到客户端中断连接。如果有300个客户端,那么你的服务器将会有300线程和实例,对服务器硬件和内存是个考验。

适用环境:这个设置是线程安全的!

•客户端数量少,每台服务器不超过连接数量: 200 x CPU个数 x (每个CPU核数x0.7) (这是经验值,稳定连接的数量,不是极限数量,别误解^_^),内存现在很便宜了,想加多大就多大!
•客户端频繁调用服务器数据,无论连接数量是多少,最好都用这种设置。如果客户端很多,建议采用负载平衡和多台服务器来解决。
2. Invocation

说明:服务器只是建立连接,但是先不做实例化,只有当客户端请求功能的时候,服务器才开线程并实例化,当客户端用完后,服务器就释放线程和实例。

 适用环境:这个设置是线程安全的!

•如果客户端调用服务器数据频率低,这种方法很不错,会节约很多内存。
3. Server

说明:服务器对所有客户端连接使用一个实例,不是线程安全的。所以要自己控制客户端并发调用的问题(可以使用互斥、原子量等方法),让客户端的调用排成一队使用服务器资源。

 适用环境:这个设置不是线程安全的!!

•配置较低的服务器
•服务器连接的另一端只能是单线程工作的模式

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sunstone/archive/2010/02/02/5282666.aspx

时间: 2024-09-12 16:53:40

Delphi2010中DataSnap高级技术(7)—TDSServerClass中Lifecycle生命周期三种属性说明的相关文章

Delphi2010中DataSnap高级技术(2)—DataSnap服务端和客户端发布分发方法

这几天继续研究DataSnap技术. 针对服务器和客户端软件,如何发布呢?经过研究发现,分发方法非常简单! 服务器发布方法: 1.在unit ServerMethodsUnit1单元中,添加uses MidasLib;(添加MidasLib的目的是省去发布Midas.dll) 2.我用的是火鸟数据库,只需拷贝dbxfb.dll和fbclient.dll 分发的服务器软件只需三个文件:你的服务器程序.dbxfb.dll 和 fbclient.dll 客户端发布方法: 1.在客户端程序中加上uses

Delphi2010中DataSnap高级技术(4)—TCP keepAlive和KeepAliveInterval参数详解

Delphi2010中DataSnap,如果客户端异常掉线或拔掉网线,那么在服务端会留下一个TCP连接,这个连接会变成死连接(经过测试,如果windows的TCP保持连接禁用的话,三个小时该死连接还不消失).如果大量客户端并发,出现的死TCP连接过多,服务器内存和端口将会增加,直到占满服务器的端口和耗尽内存为止.如果这样的话,服务器无法健壮稳定的运行. 大家可以另开线程来监控客户端连接,但是今天要给大家讲解的不是这个方法,而是使用TCP协议自带的心跳包功能解决这个问题. 大家先了解一下 TCP

Delphi2010中DataSnap高级技术(5)—建立稳定服务程序之TCP心跳包的使用

为了能让我们的服务程序更加稳定,有些细节问题必须解决.就如上一讲中提到的客户端拔掉网线,造成服务器上TCP变成死连接,如果死连接数量过多,对服务器能长期稳定运行是一个巨大的威胁. 另外,经过测试,如果服务器上有TCP死连接,那么服务程序连接数据库,也会产生那个一个死连接.这样的话,给数据库服务器也造成威胁.所以,服务器程序编写的好坏,直接影响系统的稳定性! 如何解决TCP死连接的问题,有多种方法,其中最有效的就是心跳包技术. 我们在DSServer的OnConnect事件中加入心跳包代码 use

Delphi2010中DataSnap高级技术(3)—DataSnap服务器如何得到客户端的IP和端口

作为一个服务器软件,必须做到对客户端强有力的控制,想要控制,就必须得到客户端的网络基本信息,比如客户端IP和端口.有了客户端IP就能随心所欲操控客户端,比如终止某些客户端的连接.限制功能等等. 在delphi2010中的datasnap服务器如何获得客户端ip,的确花了我点时间,奇怪为什么这个功能不做的更人性化点呢,功能总是藏着掖着.还得让程序员像寻宝一样摸索,浪费时间.现在把我整理的结果奉献给大家,免得大家在花时间研究这个. 另外,通过研究发现,DSConnectEventObject.Cha

Delphi2010中DataSnap高级技术(6)—加强服务程序对访问者的控制能力

1)作为一个服务程序,如果不限制客户端访问数量,后果将是很可怕的.如果有人恶搞,服务器不堪重负,内存将耗尽,最终服务器将宕机.如何限制访问者的数量呢? 我们可以设置一个变量,来记录来访者的数量,如果超过我们既定的数字,那么后续的连接服务器请求,都将被断掉. 2)限制了访问数量,但是如果不做密码身份认证,无关的人员也将能登陆服务器!解决办法是客户端传入用户名和密码,如果用户名和密码不正确,连接将被挂断. 在客户端的SQLConnection1中driver分类的username和password属

面向大众的移动技术:Android应用程序生命周期中的活动与图标

简介 如今移动设备的功能已经强大到难以置信,比众多开发人员用来编写首个程序的桌面计算机还 要强大得多.因此,大家很容易忘记移动设备仍然属于资源有限的环境.开发移动应用程序时,决不能忘记运 行应用程序的环境所具有的局限性.尤其是当应用程序要与其他应用程序竞争系统资源时 - 其中有些应用程 序对于用户的日常行为而言比您的应用程序更加重要. 确保应用程序广受欢迎的途径之一是保证它节 省系统资源.在 Android 中,使用和保持系统资源的机制都是 Activity 类.您越了解这个基本类(与 Java

ASP.NET中的Global.asax以及Web应用的生命周期

asp.net|web   ASP.NET中的Global.asax以及Web应用的生命周期     Global.asax 文件,有时候叫做 ASP.NET 应用程序文件,提供了一种在一个中心位置响应应用程序级或模块级事件的方法.你可以使用这个文件实现应用程序安全性以及其它一些任务.    Global.asax 文件被配置为任何(通过 URL 的)直接 HTTP 请求都被自动拒绝,所以用户不能下载或查看其内容.ASP.NET 页面框架能够自动识别出对Global.asax 文件所做的任何更改

用ASP技术得到主页被访问次数的三种方法

访问 用ASP技术得到主页被访问次数的三种方法             华中理工大学自动控制工程系  周茜 田忠和    ASP 是Microsoft Active Server Pages 的缩写,即动态服务器主页. 它是服务器端脚本编写环境,在Web服务器上解释脚本,可以组合HTML页.脚本命令和ActiveX组件来创建动态.交互式.高效率的 Web 页和基于 Web 的功能强大的服务器应用程序.ASP 可以在Microsoft 的任何 Web服务器上发布各种动态数据,而且ASP应用程序很容

一起谈.NET技术,三种属性操作性能比较:PropertyInfo + Expression Tree + Delegate.CreateDelegate

在<上篇>中,我比较了三种属性操作的性能:直接操作,单纯通过PropertyInfo反射和IL Emit.本篇继续讨论这个话题,我们再引入另外两种额外的属性操作方式:Expression Tree(这和IL Emit基本一致)和通过Delegate的静态方法CreateDelegate创建相应的委托进行属性的赋值和取值.[源代码从这里下载] 目录 一.定义测试相关的接口.类型和委托 二.通过Expression Tree的方式创建用于属性操作的委托 三.编写属性赋值操作测试方法 四.编写属性取