我需要一些关于如何最好地使用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()),但看起来好像这会为每个服务器响应添加冗余数据。
非常有趣的问题!只需要注意一点:“差异”总是从客户端到服务器的RF(这是客户端的edit()函数的作用:跟踪更改以便差异化) –
啊,所以你在说一个'find'总是创建一个新的EntityProxy,并且没有考虑任何已经存在的具有正确的id和版本的EntityProxy,对吗?而且我应该小心地回复我的请求中的小实体,因为在这里没有客户知识的差异,对吗? – Marc
了解... RequestFactory无法知道服务器端实体的哪些部分发生了变化,因此它将成为全部或全部变化。 – Marc