2011-02-23 49 views
3

我想從服務器獲取兩個XML文檔,並在兩者都到達時恢復處理。我可以並行獲取它們,還是必須在第一個請求完成之前不要發出第二個請求?等待多個事件(使用GWT)

回答

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(); 
     } 
    } 
    }); 
} 

正如克里斯指出,這可能會碰到的最大併發請求到相同的主機名上限,所以如果你有很多的請求一次發送,你可以繼續請求隊列,並調用下一個在proceed()中,直到隊列耗盡。

但是,如果您計劃有很多併發請求,那麼您可能需要重新設計您的服務,以便一起批量操作。

+0

謝謝。看起來很簡單,爲我的情況執行。我不想依靠服務器上的代碼來響應這些請求,所以對它們進行批處理似乎並不是正確的方法。 – 2011-02-23 18:35:30

2

您可以並行獲取它們,但請記住,瀏覽器對並行請求的數量有限制,請參閱http://www.browserscope.org/?category=network(在左上角的下拉列表中選擇「主要版本」以查看更多版本)。特別要注意的是,IE < 8的每個主機名限制爲2個連接!

如果您仍想這樣做,請注意響應可以按任意順序到達。所以你必須實現一些能夠跟蹤請求/響應(計數器或更復雜的事情)的東西,以便你知道什麼時候你需要的所有響應都已經到達。

最好的解決方案通常只發送一個請求來請求這兩個XML文檔,並且服務器在一個響應中同時返回它們。