我想构建一个具有以下功能的客户端/服务器(或3层)类型的Win32应用程序:
Pdta:我的数据库是MySQL 5.1
答案 0 :(得分:2)
我的回答取决于您的网络架构,但我倾向于将IP用于此类事情。像Multicast这样的东西是通知网络上所有客户的理想方式。简单地多播或广播(UDP)可以是所需的全部更新记录的ID。如果另一个客户端对该记录感兴趣,则可以从数据库中刷新它。
Indy Multicast客户端/服务器组件将提供一种在您的应用中实现此功能的简单方法。
答案 1 :(得分:2)
请注意,通过执行此操作并拥有大量客户端,您可能会获得大量网络流量。 这正是大多数客户端 - 服务器应用程序不这样做的原因。
如果你真的想这样做,那么正确的是实现'观察者模式';她博客中关于Delphi has been described by Joanna Carter中该设计模式的基本示例。
然后,您需要扩展该模式,以便它可以在网络上运行。 所以至少你需要一些处理“主题”界面的服务器进程。 您可以使用任何内容:WebServices,DataSnap服务器,RemObjects SDK等。
大多数人都想要这样的解决方案,从传统的客户端/服务器应用程序转变为多层应用程序。然后中间层可以为您处理所有通知。
答案 2 :(得分:0)
如果您有三层类型的应用程序,则客户端与应用程序服务器通信。此连接可以使用回调来向客户端通知重要事件。 DataSnap支持回调(afaik还有数据更改通知)。
如果您构建自己的应用程序服务器。客户端可以打开与服务器的套接字连接(在线程中)并监听事件通知。 Protocols / IdTelnet.pas中的Indy Telnet客户端示例是创建非常简单的通知实现的良好起点。它使用TIdTelnetReadThread类来监听服务器对密钥输入和协议协商的响应。
如果您的应用程序需要在终端服务器环境中运行,其中端口不会被虚拟化AFAIK,则从客户端连接到服务器更安全(而不是打开客户端套接字端口以进行对等通信)。 / p>
答案 3 :(得分:-1)
如果MySQL不支持推送信息或附加客户端的某些人,则需要使用服务器上运行的中间层。 该服务器跟踪连接的客户端。但这可能是一份工作。
我知道Delphi的“更大”编辑对构建这种客户端/服务器软件有一些支持。
答案 4 :(得分:-1)