【问题标题】:Communication among clients in Delphi 2009Delphi 2009 中客户之间的通信
【发布时间】:2009-08-16 16:50:46
【问题描述】:

我想构建一个客户端/服务器(或三层)类型的 Win32 应用程序,具有以下功能:

  • 当“A”客户端对数据库进行修改(更新、插入等)时,查看同一记录集的其他客户端几乎可以“立即”获得该数据的全新视图
  • 与数据库的连接丢失时可以通知客户端

有人可以帮我吗?提前致谢

Pdta:我的数据库是 MySQL 5.1

【问题讨论】:

    标签: database delphi winapi client-server delphi-2009


    【解决方案1】:

    请注意,这样做并拥有大量客户端,您可能会获得大量网络流量。 这正是大多数客户端-服务器应用程序不这样做的原因。

    如果你真的想这样做,那么正确的做法是实现“观察者模式”; Delphi has been described by Joanna Carter 在她的博客中提供了有关该设计模式的基本示例。

    然后您需要扩展该模式,使其在网络上工作。 所以至少你需要一些处理“主题”接口的服务器进程。 您可以为此使用任何东西:WebServices、DataSnap 服务器、RemObjects SDK 等。

    大多数人想要这样的解决方案,从传统的客户端/服务器应用程序转变为多层应用程序。然后中间层可以为您处理所有通知。

    【讨论】:

      【解决方案2】:

      我的答案取决于您的网络架构,但我倾向于将 IP 用于此类事情。像多播这样的东西是通知网络上所有客户端事件的理想方式。只需多播或广播 (UDP) 更新记录的 ID 即可。如果另一个客户对该记录感兴趣,它可以从数据库中刷新它。

      Indy 多播客户端/服务器组件将提供一种在您的应用中实现此功能的简单方法。

      【讨论】:

      • 我们在以前的雇主处使用过类似的东西(但设计严重过度)。可能只需要发送一个表标识符、记录 ID 和操作(添加/更新/删除)操作。
      • 多播只能在您的本地局域网上工作(并且仅当交换机转发多播数据包时); Billiardo 应该使用观察者模式。
      【解决方案3】:

      如果您有一个三层类型的应用程序,客户端将与应用程序服务器通信。此连接可以使用对客户端的回调来通知他们重要事件。 DataSnap 支持回调(afaik 也支持数据更改通知)。

      如果您构建自己的应用程序服务器。客户端可以打开到服务器的套接字连接(在一个线程中)并监听事件通知。 Protocols/IdTelnet.pas 中的 Indy Telnet 客户端示例是创建非常简单的通知实现的良好起点。它使用 TIdTelnetReadThread 类来监听服务器对密钥输入和协议协商的响应。

      如果您的应用程序需要在终端服务器环境中运行,其中端口不会被虚拟化 AFAIK,从客户端连接到服务器会更安全(而不是打开客户端套接字端口进行对等通信)。

      【讨论】:

        【解决方案4】:

        如果 MySQL 不支持某种推送信息或附加客户端,您将需要使用在服务器上运行的中间层。 该服务器跟踪连接的客户端。但这可能是一项艰巨的工作。

        我知道 Delphi 的“更大”版本对构建这种客户端/服务器软件有某种支持。

        【讨论】:

          【解决方案5】:

          我知道这与您的应用程序无关,但Firebird 有一个很好的功能可以做到这一点。你可以阅读更多关于他们的信息here(链接到 PDF)。

          现在,如果您需要使用 MySQL 和 Delphi 执行此操作,我能想到的最简单的方法是在您的 Win32 应用程序上执行“AJAX LIKE”。那就是拥有一个服务器端应用程序(您可以使用带有 PHP、Java、.NET 或任何您想要的任何东西的 WebServer)来满足您要求数据更新的请求。在服务器端应用程序上,只需执行查询请求修改您的 MySQL 数据库。

          希望对你有帮助。

          【讨论】:

            猜你喜欢
            • 2012-04-09
            • 1970-01-01
            • 1970-01-01
            • 2011-10-07
            • 2017-02-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-11-01
            相关资源
            最近更新 更多