kbmMW DXE8更新连接的客户端

时间:2016-01-19 17:38:08

标签: android ios delphi

使用Delphi XE8 Enterprise

有没有人有一个示例演示如何在状态模式下连接到kbmMW服务器的连接客户端自动更新另一个客户端提交的数据更改?

因此,客户A更新订单表中的行或向订单表添加新订单。

客户端B,C和D是否有状态连接,服务器是否更新了本地数据对象,并自动更改了客户端A的更改?

这对kbmMW有用吗?是否已经为此提供了一种机制,还是需要进行大量编码?

其次,是否有推荐的方法来更新低性能移动设备上的数据集,以最大限度地减少或消除GUI更新延迟?我尝试使用泛型方法在后台线程中提取数据,然后设置memtable.disablecontrols,然后通过同步线程将查询结果复制到内存数据集中。

即使使用四核snapdragon 2.5ghz处理器,延迟/ GUI冻结也非常明显。

很明显,我应该只更新更改的值。使用TkbmMemTable或TkbmMWClientQuery执行此操作的最佳/最快方法是什么?

找到? 根据键值设置过滤器? 直接访问底层delta?

使用TMSFMXGrid,kbmMW 4.90,Android 4.4,5,将移植到iOS 4,5& 6。

感谢。

1 个答案:

答案 0 :(得分:0)

如果您使用的是Enterprise Edition,我会选择使用WIB(消息传递)传输客户端和服务器端。

如果您的数据是通过解析更新的,那么一种方法是挂钩解析器OnSubInsert / OnSubDelete / OnSubModify事件,这些事件在解析期间为每个子操作(表)单独调用。

然后,您可以向客户端发送更改已发生的通知并让他们请求新的完整数据集,或者您可以将增量值推送到客户端,并让他们在本地更新其数据集。

如果您的用户数据是通过业务方法(PerformCreateCustomer ...等)更新的,那么您将通知代码放在那里,再次通过向所有连接的客户端发送信息来请求新的数据集(可能通过ID过滤)您可以提供的更新数据来自客户,或仅将修改推送给客户。

客户端数据集与服务器端数据集是一对一匹配(即结构相同且只涉及一个表),您甚至可以挂钩WIB OnRequest方法,获取用户数据流(包含delta)并将其转发给其他客户端,并让自定义解析器处理更新数据集的解析。

事实上,你可以选择让所有客户订阅REQ。 .servicename。*。RESOLVE。> subject,并告诉服务器自动中继订阅的消息(AutoRelay = true)。

然后,当任何一个客户端向服务器发送增量以解析时,所有其他客户端也将获得相同的增量。 然后,客户端可以从userdata流中选择增量,并通过自定义deltahandler更新自己的本地数据集。

在您处理delta值的所有情况下,问题不在于基础,而是多个客户端在同一数据上同时执行某些操作的情况。 然后你会有冲突,如果你不处理这些冲突,你最终会在客户端对数据集内容的外观有不同的理解。

它可以以非常精确的方式为各种情况编码,因此它可以稳定地工作,但它并非无足轻重。

最稳定的方法通常是通知客户端更大级别的更改,让他们轮询服务器以获取新数据,并根据特定ID(客户ID或其他内容)进行过滤。

最好的问候 金/ C4D