等待多个事件(使用GWT)

等待多个事件(使用GWT),gwt,gwt-rpc,Gwt,Gwt Rpc,我想从服务器获取两个XML文档,并在它们都到达后继续处理。我可以并行获取它们,还是必须在第一个请求完成之前避免发出第二个请求?您可以并行获取它们,但请记住浏览器对并行请求的数量有限制,请参阅(在左上角的下拉列表中选择“主要版本”以查看更多版本)。特别要注意的是,IE

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

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

如果您仍然想这样做,那么请注意响应可以以任何顺序到达。因此,您必须实现一些跟踪请求/响应的功能(计数器或更复杂的功能),以便知道所需的所有响应何时到达


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

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

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();
      }
    }
  });
}
private-String-responseOne;
私有字符串应答器;
公共startRequests(){
makeAsyncRequestOne(新的AsyncCallback(){
onSuccess(字符串响应){
this.responseOne=响应;
if(responsewo!=null){
继续();
}
}
});
makeAsyncRequestTwo(新的AsyncCallback(){
onSuccess(字符串响应){
this.responsewo=响应;
if(responseOne!=null){
继续();
}
}
});
}
正如Chris指出的,这可能会达到对同一主机名的最大并发请求数的上限,因此如果一次要发送大量请求,则可以保留一个请求队列,并在
procedure()
中调用下一个请求,直到队列耗尽


但是,如果您计划有大量并发请求,您可能需要重新设计服务,以便一起批处理操作。

谢谢。看起来很简单,可以在我的案例中实现。我不想依赖服务器上的代码来响应这些请求,所以批处理它们似乎不是正确的方法。