7

使用 DWR 可以将多个服务调用组合成一个 HTTP 请求:
dwr 批处理功能

此功能对于减少 ajax 应用程序的延迟非常有用。有没有办法用 GWT / GWT-RPC 做类似的事情?
谢谢你的帮助

4

4 回答 4

8

Google 的 Ray Ryan 做了一个关于构建GWT 应用程序的最佳实践的演讲,他在演讲中谈到了使用命令模式。您可能想要发送碰巧通过 RPC 的异步命令。一旦您发送命令而不是 RPC,就很容易对它们进行批处理。

有关为您实现此模式的库,请参阅gwt-dispatch。我刚刚开始使用它,所以我不知道它是否会自动批处理,但它都是具有许可许可证的开源软件,因此如果没有,您可以修复它。

于 2009-10-09T15:13:51.500 回答
1

GWT 不提供批处理多个任意 RPC 的一步式解决方案。但是,请记住,GWT 的自动序列化使得编写每个 RPC 方法的串行版本和批处理版本变得非常容易。例如,假设您已经定义了这个 RPC:

FooResponse callFoo(FooRequest request);

自己编写同一个 RPC 的“批处理”版本就这么容易:

ArrayList<FooResponse> batchCallFoo(ArrayList<FooRequest> requests) {
  ArrayList<FooResponse> responses = new ArrayList<FooResponse>();
  for (FooRequest request : requests) {
    responses.add(callFoo(request));
  }
}
于 2008-10-25T19:15:29.057 回答
1

这是一个很好的问题,但我认为没有一个简单的解决方案。

我相信您必须创建一个单独的方法,将您的方法组合在一起,以与 DWR 类似的方式实现批处理。

即,如果您有:

public int add(int x, int y);
public int sub(int i, int j);

您将创建一个新方法来组合它们:

public Map<String, Integer> addAndSub(Map methodsAndArguments) {
    // Call add and sub methods with it's arguments
}

当然,您仍然需要在相同的回调方法中处理整个响应。

我意识到这可能不是最优雅的解决方案,但由于 GWT RPC 的工作方式,我认为这是要走的路。使用 GWT,我认为您通常应该尝试编写您的方法,以便批处理甚至不会成为您需要考虑的问题。

于 2008-12-30T11:49:37.450 回答
1

如果您的应用程序适合 Comet 的域(服务器端推送),您也可以使用GWTEventService :

GWTEventService 是一个基于事件的客户端-服务器通信框架。它使用 GWT-RPC 和 Comet / server-push 技术。客户端提供了一个高级 API,可以将侦听器注册到服务器,就像注册一个 GUI 组件一样。事件可以添加到服务器端的上下文/域中,客户端的侦听器会收到有关传入事件的通知。服务器端完全独立于客户端实现并且是高度可配置的。

因为此事件模型提供的优势之一是:

捆绑事件以减少服务器调用

于 2010-06-11T06:55:36.827 回答