创建 Delphi DataSnap 程序的问题集萃(1)

创建 Delphi DataSnap 程序的问题集萃(4) (本文所讨论的开发环境,为 Delphi XE5)     最近有点小忙,博客只能忙里偷闲地写了。     本篇介绍如何在客户端和服务器端之间传递数据。     我本人很不喜欢在页面上频繁地使用数据感知控件,并使用 DataSet 来作为参数传来传去——因为 DataSet 并不是一个强类型类,而且它与数据库的耦合性太紧了。     相比较于 DataSet(如 TClientDataSe 阅读详情

(本文所讨论的开发环境,为 Delphi XE5)
    当我们开始创建第一个 DataSnap 商业软件前,有些技术上的问题必须明确。
    DataSnap 是三层架构,客户端暂且不谈,我们先讨论一下服务器端的架设。
    在服务器端,其实要实现两层架构:业务逻辑部分、数据访问部分。
    在 DataSnap 中,我们使用 TDSServerModule 类,以服务的方式将业务逻辑展示给客户端。也就是说,只有这个类中的 Public 方法才能被客户端访问。
    那么,问题来了:如果有多个业务对象,是为每一类业务接口分别创建一个TDSServerModule?还是服务器端统一只用一个TDSServerModule?
    服务器端统一使用一个TDSServerModule 的好处是不言而喻的,没有任何的歧义;但当项目很大、业务逻辑接口很多时,该单元将会很庞大,查找、阅读、修改都将带来不便;同时,也不能充分利用服务的生命周期。因此,我的倾向是:分别为每一类业务逻辑接口创建各自的 TDSServerModule ,并为服务接口分别设置合适的生命周期。这需要在 TServerContainer 中指派更多的 TDSServerClass,以与 TDSServerModule 单元一一对应。
    第二个问题:服务器端通过 TSqlConnection、TADOConnection、TUniConnection 等控件与数据库连接,这类数据库连接控件将在哪儿创建?是在 TServerContainer 中,还是在 TDSServerModule 中?
    在 TServerContainer 中创建,意味着服务器端只生成一次对象实例,当用户连接数量多时,系统会很快挂掉。所以,我们应该在 TDSServerModule 中创建,这样,每个连接上来的用户都将生成一个数据库连接,并且,业务逻辑中的事务处理将不受影响。
    当服务器端使用 Invotation 模式的生命周期,且大量的客户端连接时,我们可以采用对象池的设计,为 TDSServerModule 建立对象池,以避免大量的创建、销毁 TDSServerModule 影响服务器的性能。

创建 Delphi DataSnap 程序的问题集萃(2) 当服务器端使用 Invotation 模式的生命周期,且大量的客户端连接时,我们可以采用对象池的设计,为 TDSServerModule 建立对象池,这其实也是数据库连接对象的对象池。     这带来了新问题:我们的业务对象如何取得数据库连接?     数据库连接对象存在于 TDSServerModule 中,而 TDSServerModule 是用户连接并执行服务器方法时动态创建。如果业务对 阅读详情

相关推荐

Delphi 使用 Datasnap 进行三层应用开发

转载记录: Delphi 使用 Datasnap 进行三层应用开发,积累了几种技术,总结如下: 1、(推荐!)在 Datasnap 服务端 使用 TDatasetProvider,客户端 使用 TDSProviderConnection 1)采用Datasnap Server ,可以使用TCP/IP、Http 通信。TDatasetProvider能够提供“元数据与业务数据”。 推荐:采用(FireDac技术) TFDConnection 连接数据库,通...

1833

Delphi DataSnap 流程分析(一)

好像和HTTP都没什么关系,和TDSServerTransport有关系,TCP的有个组件TDSTCPServerTransport,也看看它的继承关系。现在的方式2添加了HTTP支持,但是其实现方式不是直接通过WebModule来实现,而是转了个弯,通过桥接Indy的Http来实现。开始引入了Dispatch,到这里基本就明白了,后面的处理方式和一般的HTTP类似,只是简化了(DataSnap专用)。我们先来简要分析下方式2的流程,然后主要分析方式1的流程,方式3的流程类似方式1,就不做分析了。

舞天涯的专栏 2097

DELPHI DataSnap Restful 连接方式1--使用DSRestConnection

1、安置一个DSRestConnection控件 2.设置DSRestConnection1控件属性   host loginprompt port 3、右键点击DSRestConnection1,出现菜单 4、选择“Test Connecttion” 这就表示成功连接到了datasnap Restful服务器 5、右键点击DSRestConnection1...

ghostking8的专栏 4184

delphi rest server 很好用,但不好设置

选择 TDSServerModule (如果选择 TComponent,第一次点 Open Browser 看内容时候,会报错。虽然没啥影响,但总是不舒服。比如:http://localhost:8080/api/v1/EchoString?感觉在 OnParsingRequest 里还可以做一些修改。应该就是在这里做判断,并修改成“真”的内容。勾上 Simplified Dispatcher。DSRESTWebDispatcher1 改一下。于是 RESTDebugger 就可以支持。

iamduo的专栏 558

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

Lifecycle 三种属性: Session、Invocation、Server这三种属性都用在什么情况,有什么要注意的事项,Delphi2010中罕有说明。如果乱用这三种属性,你的服务程序有可能崩溃,数据混乱,内存占用大,效率低等问题!下面我对这三种属性的使用环境逐一介绍: 1. Session说明:这是delphi2010中默认属性,也是delphi推荐设置。Sess

SUNSTONE的Delphi笔记 6901

基于DataSnap回调机制的Delphi聊天服务器实战项目

假设你在等一份快递。有两种方式:轮询(Polling):每隔5分钟打一次电话问:“到了吗?→ 结果:快递员烦死了,你还未必第一时间知道。回调(Callback):留个电话说:“到了告诉我。→ 快递员一到门口就给你打电话,即时、省事、不打扰别人。在技术上,这叫“事件驱动架构”——不再由客户端驱动流程,而是由事件触发行为。end.注意这个 GUID!它是接口的唯一身份标识,就像身份证号一样重要。

weixin_42476987的博客 476

Delphi 三层框架 DataSnap 的服务器端设置

elphi 三层框架 DataSnap 的服务器端设置: DataSnap 框架有三个模块:DataSnap Server,ServerModule,DataSnap Client Module。 当创新新的DataSnap Server时,会产生三个文件,分别是: 1)ServerForm 窗口文件; ----- 可以扩展了此功能,使得ServerContain...

weixin_30540691的博客 426

DataSnap综合演示程序

DataSnap Demo:TFDConnection、最大连接数、客户端回叫功能、多线程模拟、压力测试等,编译环境XE6 Update 1

关于TScreen::TDataModule没有互斥,在Datasnap中引出的BUG

Datasnap中的TDSServerModule是继承于TDataModule,TDSServerModule实例的Destory,没有做互斥 destructor TDSServerModuleBase.Destroy; begin //TDataModule if OldCreateOrder then DoDestroy; if Assigned(RemoveData

he_Fly的专栏 855

李维_Delphi_XE程序设计系列2

李维 Delphi XE程序设计系列 2-开发DataSnap/REST服务器 在上次的文章中讨论了如何把传统的Delphi 主从架构应用程序逐渐转换为DataSnap JSON服务器,在本篇文章中让我们正式讨论如何使用Delphi XE开发DataSnap/REST服务器,

手把手教你搭建自己的 API 中转站

本文介绍了如何通过开源工具CLIProxyAPI(CPA)搭建本地AI模型代理服务,解决多工具切换、海外API访问困难等问题。CPA可将OpenAI、Gemini等不同服务的API统一封装,用户只需配置一次账号信息,所有客户端即可通过标准接口访问。文章详细讲解了CPA的下载安装、配置修改、账号导入及客户端连接方法,并强调其经济性、可控性和集中管理优势。通过自建中转站,用户可避免第三方服务的质量风险,实现多账号负载均衡,构建个人AI资源池。最后提供了网络配置等实用建议,帮助开发者高效使用AI编程工具。

DongJiYong_20的博客 1804

DataSnap 2009 系列之二 (方法篇)

在过去客户端要调用远程服务器的方法需要通过在TLB里添加接口并且在服务器对象中实现 在DataSnap 2009中调用远程服务器的方法是基于delphi的RTTI机制的 想要一个类允许被远程调用需要做以下两点 1.把该类和DSServerClass连接在一起 procedureTMainForm.DSServerClassGetClass(DSServerClass:TDSSe...

weixin_30549657的博客 165

5GCPE与4G物联网卡兼容实战:通过AT指令修改IMEI实现设备迁移

本文详细介绍了如何通过AT指令修改5GCPE设备的IMEI,实现4G物联网卡的设备迁移。从硬件准备、驱动安装到串口工具配置,再到具体的AT指令操作步骤,提供了全面的实战指南。文章还包含信号优化、APN设置等实用技巧,帮助用户顺利完成设备迁移并提升网络性能。

weixin_28684757的博客 629

创建 Delphi DataSnap 程序的问题集萃(3)

(本文所讨论的开发环境,为 Delphi XE5)     本篇介绍如何实现服务器端数据库连接的共享。     常见的数据库连接实现,是为每个数据模块建立一个连接。但这样做将产生大量的数据库连接,并产生很多问题。     在上一篇,我们分析了 Datasnap 客户端连接服务器端时相关事件的执行顺序。其中,ServerContainerUnit1 容器是在服务器端一开始运行时就创建,直到

dongfirst的专栏 1822

XDS110 USB Debug Probe连接错误-260:CCS Theia环境下的诊断与修复指南

本文详细解析了CCS Theia环境下XDS110 USB Debug Probe连接错误-260的诊断与修复方法。从硬件连接到驱动状态、固件更新到软件配置,提供了全面的排查指南,帮助开发者快速解决这一常见的调试器通信障碍问题,确保嵌入式开发工作流畅进行。

hope8的博客 283

InTouch历史报警与操作记录高效查询控件V4.0实战指南(一键下载即用)

本文详细介绍了InTouch历史报警与操作记录高效查询控件V4.0的实战应用。该控件针对原生AlmDbViewCtrl控件的查询效率低下、功能单一等问题,提供了智能查询、可视化统计、视图定制和一键导出Excel等强大功能,旨在帮助工程师快速处理海量历史数据,大幅提升工控运维效率。

g9h0i1的博客 960

DataSnap初步二

复习上一篇的内容:   1. 一个典型的DataSnap服务器至少需要三个控件: TDSServer: DataSnap的逻辑核心控件,控制服务器的运行。 TDSServerClass: DataSnap服务端服务导出控件,通过OnGetClass事件来导出服务端的类及方法供客户端的远程调用。          作为服务端导出给客户端远程调用的类需要满足以下两个条件:         

A00553344的专栏 2681

Linux yum源配置以及yum命令讲解

前面为大家介绍了RPM二进制包安装软件,RPM包安装的最大的缺点也提到过,就是依赖性太强,一旦遇到依赖问题,则需要我们手动解决包之间具有依赖性的问题,今天为大家介绍一种可自动解决包之间依赖关系的安装方式:yum。 yum 全称“Yellow dog Updater, Modified”,是一个专门为了解决包的依赖关系而存在的软件包管理器。就好像 Windows 系统上我们通常可以通过各种软件管家实现软件的一键安装、升级和卸载,yum就是Linux 系统中的一键安装工具。yum 解决依赖关系的基本逻辑是:yu

九派Linux的博客 2283

datasnap 2010 心跳包,连接断开处理

procedure TMainForm.DSServer1Connect (DSConnectEventObject: TDSConnectEventObject); var // RowIndx: Integer; InVal: TCP_KeepAlive; Ret:

leon_kin的专栏 2008

海思ISP调优实战:从实验室到真实场景的IPC相机图像质量优化指南

本文深入探讨海思ISP调优在IPC相机图像质量优化中的实战应用,从实验室标定到真实场景部署的全链路调优方法。重点解决光照动态范围、色温变化和噪声特性等核心问题,提供AE权重表配置、CCM标定、3DNR时域滤波等关键技术方案,帮助实现从理论到实践的图像质量提升。

s3t4u的博客 750

【产品】 产品设计:如何解决铝合金氧化着色后表面硬度低的问题(硬质氧化)

1、氧化处理技术 1)化学氧化 化学氧化处理所获得的膜层较薄,一般厚度为0.5μm ~4μm,质软不耐磨,抗蚀能力低于阳极氧化膜。 一般不宜单独便用,由于化学氧化膜吸附能力好,主要作用于油漆的底层,化学氧化按其溶液性可分为碱性和酸性两种。按其膜层性质可分为氧化膜,磷酸盐膜、铬酸盐膜及磷酸一铬酸盐膜等(这类型的氧化膜是可导电)。 2)电化学氧化(阳极氧化) 电化学氧化(俗称阳极氧化)是铝及...

产品线负责人 9732

delphi互联网消息服务器,Delphi2010中采用DataSnap的三层网络架构服务器获取客户端ip,端口信息...

需要的控件首先要有 TDSServerModule、 TDSServer、TDSTCPServerTransport;TDSServerClass、TDataModule;实现上述功能主要控件如下图所示包含的单元包括SysUtils, Classes,DSTCPServerTransport,DSHTTPCommon, DSHTTP,DSServer, DSCommonServer, Provid...

weixin_39858124的博客 804

MTK Meta ISP 工具使用技巧与参数读取路径全解析

在联发科(MediaTek, MTK)平台上进行相机图像调试时,Meta ISP 工具是连接 PC 与设备进行参数调整、寄存器读取和图像输出的重要工具。本文以实战角度出发,系统梳理 Meta ISP 的使用流程、关键模块功能、典型调试技巧与参数读取路径,结合最新版平台(如MTK Genio/Dimensity 系列)架构,帮助工程师掌握联发科图像调优的核心流程。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1147

DataSnap基础

1. DATASNAP 历史 作为MIDAS起始于Delphi3,Delphi4是MIDAS II,Delphi5中是MIDASIII,而后基于COM远程数据模块方式使 用TCP/IP,HTTP,(D)COM构建出强大的通讯能力.从Delphi6开始改名为DataSnap,直到D2007这个框架一直在使 用.D2009重新架构了DataSnap—移除COM依赖,使用TCP/IP以更轻量级的方式生...

weixin_30449239的博客 465

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

DataSnap数据库连接池,数据集对象池的应用

传统的应用服务器的开发往往是在ServerMethods单元中拖放一堆TDataSet, TDaTaSetProvider控件,这是一个最简单粗暴的开发方向,往往会造成服务端程序文件的臃肿、服务运行期间内存资源消耗过大的问题。因此这种往应用服务器中拖放一堆TDataSet, TDaTaSetProvider控件的做法,非常的笨拙。 当然了,如果我们的系统采用的是以短连接...

weixin_30709809的博客 478

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

上一篇: Delphi scktsrvr 三层架构程序,解决“远程主机强迫关闭了一个现有的连接”(2)
下一篇: 创建 Delphi DataSnap 程序的问题集萃(2)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值