等待多个事件(使用GWT)

时间:2011-02-23 12:13:44

标签: gwt gwt-rpc

我想从服务器获取两个XML文档,并在两者都到达时继续处理。我可以并行获取它们,还是在完成第一个请求之前必须避免发出第二个请求?

2 个答案:

答案 0 :(得分:2)

您可以并行获取它们,但请记住,浏览器对并行请求的数量有限制,请参阅http://www.browserscope.org/?category=network(在左上角的下拉列表中选择“主要版本”以查看更多版本) 。特别注意,IE< 8每个主机名限制为2个连接!

如果您仍想执行此操作,请注意响应可以按任何顺序到达。因此,您必须实施能够跟踪请求/响应(计数器或更复杂的内容)的内容,以便您知道所需的所有响应何时到达。

最好的解决方案通常是只发送一个请求两个XML文档的请求,服务器在一个响应中同时返回它们。

答案 1 :(得分:1)

发出两个请求,然后检查其中一个是否完成另一个请求是否完成,如果完成则继续检查。

private String responseOne;
private String responseTwo;

public startRequests() {
  makeAsyncRequestOne(new AsyncCallback<String>() {
    onSuccess(String response) {
      this.responseOne = response;
      if (responseTwo != null) {
        proceed();
      }
    }
  });

  makeAsyncRequestTwo(new AsyncCallback<String>() {
    onSuccess(String response) {
      this.responseTwo = response;
      if (responseOne != null) {
        proceed();
      }
    }
  });
}

正如克里斯指出的那样,这可能会达到对同一主机名的最大并发请求的上限,因此如果您有大量请求一次发送,您可以保留一个请求队列并调用{{1中的下一个请求直到队列耗尽为止。

但是如果你计划有很多并发请求,你可能需要重新设计你的服务,一起批量操作。