创建 Delphi DataSnap 程序的问题集萃(2)
来源:互联网 发布:寒武纪科技知乎 编辑:程序博客网 时间:2024/05/17 00:12
(本文所讨论的开发环境,为 Delphi XE5)
我们来看一看 DataSnap 服务器端各单元的创建顺序。
以一个标准的 VCL 服务器端为例,创建方法如下:
1.打开 XE5 的菜单 File - New - Other,选择 Datasnap Server - Datasnap Server,“下一步”中分别选择 “VCL Forms Application” - “默认” - “默认” - “TDSServerModule”,建好后,项目中一共 3 个单元,如下图:
其中,ServerMethodsUnit1 提供了服务的实现方法。它由 ServerContainerUnit1 容器中的 DSServerClass1 代理,默认的生命周期是:Session。
该服务器端运行时,首先创建了 Unit2 对应的 Form2,接着创建了 ServerContainerUnit1 容器。记住, ServerContainerUnit1 容器是在服务器端一开始运行时就创建,直到服务器端关闭、停止服务时才结束。ServerContainerUnit1 容器如下图所示,含 DSServer1、 DSServerClass1、DSTCPServerTransport1 三个控件:当客户端连接上服务器并调用 ServerMethodsUnit1 中的方法时,按以下顺序执行:
1.客户端连接到 DSTCPServerTransport12.连接到 DSServer1
3.通过 DSServerClass1 创建一个新实例:ServerMethodsUnit1,然后执行相关方法。
客户端断开时,按以下顺序断开:
4.断开 DSServer1
5.断开连接 DSTCPServerTransport1
这里要说明的是,ServerMethodsUnit1 的生命周期。
在服务端可以不止一个 ServerMethodsUnit,每个 ServerMethodsUnit 在 ServerContainerUnit1 容器中分别指定一个 DSServerClass 代理,可以为每个 ServerMethodsUnit 单独指定一种生命周期。对于 3 种不同生命周期的服务方法,调用时的执行方法也略有不同。
(一) LifeCycle = Server
执行到第 3 步时有变化。 3.如果 ServerMethodsUnit1 实例不存在,则通过 DSServerClass1 创建一个新实例,然后执行相关方法;否则,直接调用该实例的相关方法。该实例一直到服务停止才释放。
(二) LifeCycle = Session第 1 步的变化:如果第一次连接,则连接到 DSTCPServerTransport1 ;否则跳过该步骤第 2 步的变化:如果第一次连接,则连接到 DSServer1 ;否则跳过该步骤第 3 步的变化:3.如果当前连接的 ServerMethodsUnit1 实例不存在,则通过 DSServerClass1 为当前连接创建一个新实例,然后执行相关方法;否则,直接调用该实例的相关方法。该实例一直到当前连接断开时释放。(三) LifeCycle = Invotation第 3 步的变化:3.通过 DSServerClass1 为当前连接创建一个新实例,然后执行相关方法。执行结束后释放该实例。
研究不同生命周期的执行顺序,对我们实现数据库连接以及对象池技术,有着重要的指导作用。
0 0
- 创建 Delphi DataSnap 程序的问题集萃(2)
- 创建 Delphi DataSnap 程序的问题集萃(1)
- 创建 Delphi DataSnap 程序的问题集萃(3)
- 创建 Delphi DataSnap 程序的问题集萃(4)
- Delphi XE8中开发DataSnap程序常见问题和解决方法 (-)启动创建好的DBExpress工程时候报错了!
- Android程序连接Delphi DataSnap服务器
- Delphi 的一个加密和压缩组件 (用于DataSnap多层程序中)
- 让Delphi的DataSnap发挥最大效率
- 让Delphi的DataSnap发挥最大效率
- 让Delphi的DataSnap发挥最大效率
- 让Delphi的DataSnap发挥最大效率
- 让Delphi的DataSnap发挥最大效率
- 让Delphi的DataSnap发挥最大效率
- 让Delphi的DataSnap发挥最大效率
- Delphi的DataSnap发挥最大效率
- 让Delphi的DataSnap发挥最大效率
- [转]Delphi 2010 DataSnap白皮书2
- Delphi XML的创建问题
- setting function ends with W&A
- 有关可变形部件模型(Deformable Part Model)的一些说明
- js 控制div的隐藏与显示
- android menu的使用
- 我的android 第32天 - 广播接收者--BroadcastReceiver(二)
- 创建 Delphi DataSnap 程序的问题集萃(2)
- 『黑马程序员』---java--多线程+线程通讯
- 大型网站技术架构:核心原理与案例分析
- greenplum 激活standby 和恢复 master 原有角色
- Genesis-3D学习手册——9.使用组件
- 怎样打开VOIP与SIP
- 面向对象技术基础
- Git 内部原理 - Git References
- postgres数据库最大连接数