2013-03-29 117 views
4

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

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

如果客户端正在编辑这些代理之一并发起请求,那么RequestFactory的机器(如果我已经正确理解了这些原则)将在它检测到服务器代码所做的更改时触发EntityProxyChange事件(以便客户端可以更新其实体的显示)。

现在假定服务器正在改变它的实体以外的客户请求(例如由于另一个客户端调用服务器),以便这个客户端会看到另一个版本,如果它再次获取Person或PersonList。

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

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

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

新增:?

思考多一点吧,我不知道如何EntityProxyId的可以为服务器发送的事件通道来产生。当服务器上的实体发生更改时,服务器只有服务器ID。当然,它可以将它发送给客户端,但客户端只知道EntityProxyId的。当然,我可以为每个EntityProxy添加一个getId()(除了getStableId()),但看起来好像这会为每个服务器响应添加冗余数据。

+0

非常有趣的问题!只需要注意一点:“差异”总是从客户端到服务器的RF(这是客户端的edit()函数的作用:跟踪更改以便差异化) –

+0

啊,所以你在说一个'find'总是创建一个新的EntityProxy,并且没有考虑任何已经存在的具有正确的id和版本的EntityProxy,对吗?而且我应该小心地回复我的请求中的小实体,因为在这里没有客户知识的差异,对吗? – Marc

+0

了解... RequestFactory无法知道服务器端实体的哪些部分发生了变化,因此它将成为全部或全部变化。 – Marc

回答

2

嗯,我意识到我的帖子并不准确地回答你的问题,但这只是我的经验。实际上,如何将数据从服务器传送到客户端只是一个问题。 几年前,我面临一些任务,并为自己找到了一种让我的生活更轻松的方法。为了解释它,我想说明我的理由:

  • 您必须通过向客户端请求完整的数据传输 - 这是直接,自然的请求数据方式;
  • 您不想创建和支持2种不同的全数据传输模式:一种是通过从客户端请求,另一种是从服务器推送;
  • 但是你需要通知客户端服务器端的一些变化;

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

  1. 建立数据传输充满古典客户端 - 服务器API - 这样你就可以加载并刷新自然的方式,即使你的应用程序你推送功能被阻止或破坏。
  2. 定义可能在服务器端更改的关键信息,并且应通过推送机制将其传递给客户端。
  3. 创建小推消息结构(S),将提供给客户端只是一个通知有关变化 - 没有任何有价值的数据应交付这样 - 只是其数据被更改的密钥。
  4. 当客户端收到这样的通知时,需要做的只是以已经支持的自然客户端 - 服务器方式从服务器获取/刷新数据。
  5. 服务器逻辑不应该通过大量的通知打扰客户端 - 有时更有效的不提供更改,但只是刷新一切。

希望这会有所帮助。

+0

嗨domax,你如何建立你的推送信息?我正在研究它,我可以找到GAE的Channel API,但我找不到任何将它映射到客户端的GWT库(并且我不擅长编写JS) – manubot

+0

我使用https://github.com/Atmosphere /大气 另请参阅此处的答案:http://stackoverflow.com/questions/9825849/using-atmosphere-for-gwt-comet – domax

+0

自从我上次访问那里以来发生了变化。现在GWT支持在这里:https://github.com/Atmosphere/atmosphere-extensions/wiki/Atmosphere-GWT-2.0 – domax

相关问题