使用Delphi编写客户端-服务器应用程序

3

如何在Delphi下编写客户端服务器应用程序?我知道有DataSnap技术,但它不在专业版中。您有什么经验可以分享吗?


3
您对第三方解决方案有兴趣吗?还是仅对专业版内置功能感兴趣? - Tim Young - Elevate Software
你是在寻找客户端-服务器数据库解决方案还是更通用的客户端-服务器通信? - Eugene Mayevski 'Callback
@Tim最好不要使用任何第三方组件。@Eugene多层解决方案。 - JustMe
如果您不想使用任何第三方组件,并且希望在Delphi中获得更多功能,为什么不直接从Pro升级到Enterprise呢? - Warren P
@Warren 谢谢,我们会考虑所有可能性并选择最好的。 - JustMe
7个回答

6
这是一个比较开放的问题,因为它取决于您的数据库选择。
如果您正在寻找客户端服务器,DataSnap确实允许N-Tier解决方案,根据数据库选择,在专业版中几乎拥有您需要的所有内容。
对于客户端服务器:
客户端服务器架构是指客户端直接与服务器通信。
有几个框架可用,它们都遵循相同的模式。
DB连接->查询->(可选提供程序->TClientDataset)->TDataSource->可视控件
DBX:
- TSqlConnection - 连接到数据库 - TSqlQuery - 查询产生单向数据集的数据库 - TSqlStoredProc - 执行存储过程对DB进行操作
ADO:
- TAdoConnection - 连接到数据库 - TAdoQuery - 查询产生双向数据集的数据库
常见组件
  • TClientDataSet - 内存数据集,具有双向性
  • TDatasetProvider - 接收其他数据集并将数据与TClientDataset绑定
  • TDataSource - 将数据集与数据感知的可视化控件绑定

根据数据库选择,还有其他几个选项可用。

然而,您似乎正在询问N-Tier(中间层)类型的解决方案

对于N-Tier

N-Tier架构是指客户端与中间层通信,然后中间层再与服务器通信。它被称为N-Tier,因为您可以选择多个中间层或应用程序服务器。

商业选项(需要额外的开销)

我个人不知道有任何免费或开源选项,虽然我怀疑有一些存在。


@Robert Love - 我们使用Firebird 2.5和Devart VCL组件来连接Interbase (IBC)。我理解这种依赖关系,但我非常想知道如何将客户端与服务器分离,并且它们应该如何相互通信。 - JustMe
4
听起来你需要一个中间层解决方案,而不是客户端服务器解决方案。 - Robert Love
@Robert Love 哦哦哦... 但这仍然是客户端-服务器架构,对吧? - JustMe
2
@Robert,@JustMe:这意味着选择中间层(或n层)解决方案或自己开发。我不建议后者。在我工作的地方,我们正在考虑用商业框架替换我们自己的通信框架。这样我们就不必再投入更多人力资源来维护它了... - Marjan Venema
@Robert:WST(http://wiki.freepascal.org/Web_Service_Toolkit)是一种免费且开源的选择。它与Delphi兼容。最好从svn检查,因为0.5版本实际上已经过时了。 - Inoussa OUEDRAOGO

3

两种选择:

  • DIY(自己动手)。使用Indy和/或ICS Internet组件编写通信层和协议。需要大量的努力和测试才能做到完美。
  • 使用现成的框架,例如kbmMW:http://components4developers.com/ 或RemObjects:http://www.remobjects.com/ 两者都不免费,但如果仅从节省开发时间/成本的角度衡量,付出的代价是值得的。

1
如果您正在考虑购买RemObjects,您应该知道您可以从专业版升级到企业版,并获得DataSnap。 - Warren P

2
你可以使用WST,这是一个免费且开源的工具包,支持SOAP、XmlRPC和JsonRPC(仅适用于FPC)的Web服务消费和创建。它与Delphi兼容。最好从svn检查,因为0.5版本已经过时了。

1

使用Delphi Professional,可以编写简单的(没有WS-*标准,没有Soap 1.2服务器)SOAP客户端和服务器应用程序。

在许多情况下,Soap在跨平台/跨语言集成、标准化、按合同设计以及成熟的实现指南、最佳实践和模式方面提供了优势。

对于Soap,有很棒的(免费)工具,如SoapUI和用于Web服务描述语言(WSDL)文档的IDE编辑器,如NetBeans。


1

请看看我们的开源客户端/服务器ORM

它是多层兼容的,您可以在客户端和服务器级别都使用ORM。 ORM无处不在,JSON是选择用于客户端/服务器传输的格式。

您可以将应用程序作为本地应用程序启动,然后只需更改用于访问数据的类类型,它将成为通过命名管道、HTTP/1.1或GDI消息通信的客户端/服务器应用程序。

它被设计为与SQLite3一起在服务器端作为小而高效的数据库引擎一起工作,但是您也可以在没有SQlite3的情况下使用ORM。如果您喜欢,提供了一个纯Delphi内存引擎。

这个框架试图从底层实现N-Tier架构。即将推出的1.13版本将拥有强大的过滤和验证机制,非常适合N-Tier架构。它包含一些用户界面单元,具有完整的报告功能(以及PDF生成),能够使用数据的ORM布局从代码创建大部分用户界面。

它基于RESTful范例通过JSON从客户端访问数据。如果RESTful方法不足以满足需求,还有一种简单的实现客户端/服务器服务的方式,就像DataSnap一样。

它支持Unicode(在所有内部级别上使用UTF-8),并且可以与Delphi 6到XE(甚至是Starter版)的每个版本一起使用。


1
几个月前,我停止使用以Delphi及特定DB技术为基础的n-tiers、2-tiers体系结构实现新项目。我认为这些体系结构不具备未来性。我现在使用的体系结构是双层的。服务器是普通的HTTP服务器,可以作为应用程序服务器并提供Web客户端(可选)。虽然使用Delphi开发客户端更困难,但还是值得的。由于没有像DB连接那样提供的特定工具,我使用indy从HTTP服务器发送和接收数据。我进行GET请求以获取数据,然后解析该数据以在GUI上显示它。然后进行POST请求以更新或插入新数据。HTTP服务器处理所有业务逻辑:-)
除了未来性之外,此体系结构还更便宜且平台无关。如果您分析一下,这是大多数移动应用程序所使用的相同体系结构。因此,如果您计划将来编写移动客户端,请考虑使用脚本语言(Python、PHP、Ruby等)开发应用程序服务器。
这是我的建议。不要忘记:伟大的事业需要伟大的承诺!
  • 应用服务器是一种服务,它为您的应用程序(轻量级客户端)提供接口来获取和发送数据,并控制业务逻辑。您的应用程序不需要关心数据库或控制记录关系和数据约束,这一切都由应用服务器透明地完成。

@mjn,是的,你说得对!我习惯把HTTP服务器和数据库看做一个整体:P - Christopher Ramírez

0

对于通用的客户端-服务器通信,您可以使用我们的轻量级MsgConnect产品。这是一个跨平台的MOM(面向消息的中间件)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接