我需要一些关于如何最好地使用 GWT 的 RequestFactory 处理将服务器端更改传播到客户端的建议。
让我们假设我们有两个 EntityProxies,一个 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()),但看起来这会给每个服务器响应添加冗余数据。