【问题标题】:Client-Server application writing in delphi用delphi编写客户端-服务器应用程序
【发布时间】:2011-03-08 11:29:05
【问题描述】:

在delphi下编写客户端-服务器应用程序的最佳方法是什么?我知道有 DataSnap 技术,但它不是专业版。你有什么经验可以分享吗?

【问题讨论】:

  • 您是否也对第 3 方解决方案感兴趣,或者只对专业版包装盒中的内容感兴趣?
  • 您是在寻找客户端-服务器数据库解决方案还是更通用的客户端-服务器通信?
  • @Tim 最好没有任何第三部分组件@Eugene MultiTier 解决方案
  • 如果您不想要任何第三方组件,并且想要 Delphi 中的更多功能,为什么不直接从 Pro 升级到 Enterprise?
  • @Warren 谢谢,我们会考虑所有可能性并选择最好的。

标签: delphi client-server delphi-2010


【解决方案1】:

这是一个相当广泛的问题,因为它可能取决于您的数据库决定。

DataSnap 确实允许 N 层解决方案,如果您正在寻找客户端服务器,那么您有 专业版所需的大部分内容取决于数据库选择。

对于客户端服务器:

客户端服务器架构是客户端直接与服务器通信。

有几个可用的框架,它们都遵循相同的模式。

数据库连接 -> 查询 ->(可选提供程序 -> TClientDataset) -> TDataSource -> 可视化控制

DBX

  • TSqlConnection - 连接到数据库
  • TSqlQuery - 针对生成单向数据集的 DB 进行查询
  • TSqlStoredProc - 针对 DB 执行存储过程

ADO

  • TAdoConnection - 连接到数据库
  • TAdoQuery - 查询生成双向数据集的 DB

常用组件

  • TClientDataSet - 内存中的双向数据集
  • TDatasetProvider - 获取其他数据集并将数据绑定到 TClientDataset
  • TDataSource - 将数据集与数据感知视觉控件联系起来

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

但是,您似乎在询问 N 层(中间层)类型的解决方案

对于 N 层

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

商业选项(需要额外花费 $$)

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

【讨论】:

  • @Robert Love - 我们为 Interbase (IBC) 使用 Firebird 2.5 和 Devart VCL 组件。我理解这种依赖关系,但我对如何将客户端与服务器分开以及它们如何相互通信非常感兴趣。
  • 听起来您需要一个中间层解决方案。不是客户端服务器解决方案。
  • @Robert Love Owww... 但它仍然是客户端-服务器架构,对吧?
  • @Robert, @JustMe:这意味着采用中间层(或 n 层)解决方案或滚动您自己的解决方案。我不会推荐后者。在我工作的地方,我们正在考虑用商业框架替换我们自己的通信框架。如果只是这样,我们就不必再投入更多(wo)人力来维护它了……
  • @Robert : WST (wiki.freepascal.org/Web_Service_Toolkit) 是一个免费的开源选项。它与德尔福兼容。最好从 svn 中签出,因为 0.5 版本实际上已经过时了。
【解决方案2】:

两种选择:

  • DIY(自己动手)。使用 Indy 和/或 ICS 互联网组件自己编写通信层和协议。很多艰苦的工作,需要大量的测试才能做到正确。
  • 使用现成的框架,例如 kbmMW:http://components4developers.com/ 或 RemObjects:http://www.remobjects.com/ 两者都不是免费的,但即使仅以您节省的开发时间/成本来衡量,您所支付的钱也是值得的。

【讨论】:

  • 如果您正在考虑为 remobjects 付费,您还应该注意,您可以购买从 Pro 升级到 Enterprise,并获得 DataSnap。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

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

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

    【讨论】:

      【解决方案5】:

      看看我们的Open Source Client/Server ORM

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

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

      它被设计为在服务器端使用 SQLite3 作为小型但高效的数据库引擎,但您可以在没有 SQlite3 的情况下使用 ORM。如果您愿意,可以提供纯 Delphi 内存引擎。

      这个框架尝试实现N-Tier architecture from the bottom up。 即将推出的 1.13 版本将拥有强大的filtering and validation mechanism,非常适合 N 层架构。有一些用户界面单元,具有完整的报告(和 pdf 生成),能够使用数据的 ORM 布局从代码创建大部分用户界面。

      它基于 RESTful 范式通过 JSON 从客户端访问数据。如果 RESTful 方法不够用,还有一个简单的方法 implementing Client/Server Services,就像 DataSnap。

      它支持 Unicode(在所有内部级别都使用 UTF-8),并且适用于所有版本的 IDE,从 Delphi 6 到 XE(甚至是 Starter 版本)。

      【讨论】:

        【解决方案6】:

        从几个月前开始,我就停止使用这种基于 Delphis 和特定数据库技术的架构(n 层、2 层)实施新项目。我相信这些架构不是未来的教授。我现在使用的架构是 2 码头的。服务器是一个普通的 HTTP 服务器。它用作应用服务器*,并可选择提供 Web 客户端。在 Delphi 中开发客户端更难,但值得。由于特定工具不能用作为 DB 连接提供的工具,因此我使用 indy 从 HTTP 服务器发送和接收数据。我做了一个GET 请求来获取数据,然后解析它以在 GUI 上显示它。然后是POST 请求更新或插入新数据。 HTTP 服务器处理所有业务逻辑:-)

        除了成为未来的教授之外,这种架构更便宜且独立于平台。如果你分析它,这与大多数移动应用程序使用的架构相同。所以,如果你将来打算写一个移动客户端,可以考虑使用脚本语言(Python、PHP、Ruby 等)开发应用服务器。

        这是我的建议。不要忘记:伟大的事情需要伟大的承诺!

        • App Server 是一项服务,它为您的应用程序(瘦客户端)提供获取和发送数据的接口。它还控制业务逻辑。您的应用程序不关心数据库或控制记录关系和数据约束。这一切都由应用服务器透明地完成。

        【讨论】:

        • @mjn,是的,你是对的!我习惯于将 HTTP 服务器和数据库视为一个整体:P
        【解决方案7】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-05-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多