GWT RequestFactory并将服务器端的更改传播到客户端

关于如何使用GWT的RequestFactory最好地处理向客户端传播实体的服务器端更改,我需要一些建议.

我们假设我们有两个EntityProxies,一个PersonProxy和一个PersonListProxy(它有一个List的getter).假设客户端已从服务器获取PersonList和Person.

如果客户端正在编辑其中一个代理并触发请求,RequestFactory的机制(如果我已正确理解原则)将触发EntityProxyChange事件,如果它检测到服务器代码所做的更改(以便客户端可以更新其显示例如,实体).

现在假设服务器正在更改其客户端请求之外的实体(例如,由于另一个客户端调用服务器),因此如果客户端再次获取Person或PersonList,则会看到另一个版本.

我的问题是RequestFactory框架内部告诉客户端更改(以及尽可能多地重用机器)的最佳方法是什么?我们可以假设我有办法将简单的消息从服务器发送到客户端(例如Google App Engine的通道API或服务器发送的事件).

一个想法可能是服务器通过该通道发送一条消息,告知具有特定id的Person或PersonList已经改变.然后,处理这些消息的接收的客户端代码可以使用RequestFactory来重新获取(例如,查找)该实体.然后,应通过EntityProxyChange事件将此更改传播到客户端的其他部分.

这是要走的路吗? (如果客户端已经拥有当前版本的实体,例如因为服务器很笨并且通知客户端客户端自己做出的更改,那么触发的重新获取只会传输一些元数据,而不是整个实体再次?)

添加:

考虑一下它,我想知道如何为服务器发送的事件通道生成EntityProxyId.当服务器上的实体发生更改时,服务器仅具有服务器标识.然后它可以将它发送给客户端,但客户端只知道EntityProxyId.当然,我可以向每个EntityProxy添加一个getId()(除了getStableId()),但看起来好像这会为每个服务器响应添加冗余数据.

最佳答案 好吧,我意识到我的帖子不是你问题的准确答案,但这只是我的经验.

实际上,如何将数据从服务器传递到客户端只是一个问题.

几年前我遇到了一些任务,为自己找到了让生活更轻松的方法.为了解释它,我想说明我的理由:

>您必须通过从客户端请求完整的数据传输 – 这是直接,自然的方式来请求数据;
>您不想创建和支持2种不同的完整数据传输模型:一种是通过客户端请求,另一种是通过从服务器推送;
>但是您需要告知客户端服务器端的一些更改;

所以,现在我正在使用以下方法构建我的架构:

>构建完整的经典客户端 – 服务器API以进行数据传输 – 因此即使您的推送功能被阻止或损坏,您也可以自然地加载和刷新应用程序.
>定义可在服务器端更改的关键信息,并应通过推送机制传递给客户端.
>创建小型推送消息构造,这些构造将向客户端发送有关更改的通知 – 不应以这种方式传递任何有价值的数据 – 只需更改数据的密钥.
>当客户端收到此类通知时,需要做的就是以已支持的自然客户端 – 服务器方式从服务器获取/刷新数据.
>服务器逻辑不应该通过大量通知来打扰客户端 – 有时更有效的是不提供更改,而只是刷新所有内容.

希望这可以帮助.

点赞