我有一个大型的Delphi应用程序,其中包含核心服务器代码来保存我的数据。在同一个应用程序中,用户可以打开和关闭多个非模态客户端窗体来查看这些数据。数据更改分为两种类型 - 重要的(例如结构性更改,如添加或删除数据)和次要的,例如更改数据值。已经打开的客户端窗体必须在短时间内更新以显示更改后的数据。这不是一个数据库,我的“服务器”使用自己的数据结构,因此我的解决方案可能忽略了可能在正式数据库结构中可用的标准技术。话虽如此,我现在已经重复使用我的解决方案很多次了,所以我想问问是否有官方技术和可能简化我的代码的Delphi组件。我即将转向多线程代码,这使得问题对我来说更加相关。
我使用两种方法:
我使用两种方法:
- 时间戳。 "服务器"代码维护一个Int64值,该值取自QueryPerformanceCounter。客户端窗体在每300毫秒的计时器上检查此值,并在其时间戳与服务器的时间戳不同时进行更新。我想这就是我的“拉取”解决方案。
- 接口通知。 "服务器"代码维护从TInterfaceList派生的类,具有AddClient和RemoveClient方法,用于注册一个简单的公共客户端通知接口。每个客户端在创建时向此列表注册自身,并在销毁时注销。服务器上的数据更改会触发对该列表的迭代,调用每个客户端以通知其更改。我想这就是我的“推送”解决方案。
这两种解决方案都很好,我在两者之间犹豫不决。对于多线程的解决方案,我肯定存在其他我所不知道的问题。欢迎任何评论。我正在使用XE2。