Ожидание более одного события (с использованием GWT) - PullRequest
3 голосов
/ 23 февраля 2011

Я хочу получить два XML-документа с сервера и возобновить обработку, когда оба будут получены.Могу ли я получить их параллельно или я должен воздерживаться от выдачи второго запроса, пока первый не будет завершен?

Ответы [ 2 ]

2 голосов
/ 23 февраля 2011

Вы можете извлекать их параллельно, но имейте в виду, что браузеры имеют ограничение на число параллельных запросов, см. http://www.browserscope.org/?category=network (выберите «Основные версии» в раскрывающемся меню слева вверху, чтобы увидеть больше версий).).Обратите особое внимание, что IE <8 имеет ограничение в 2 соединения на имя хоста! </p>

Если вы все еще хотите это сделать, то обратите внимание, что ответы могут поступать в любом порядке.Таким образом, вам придется реализовать что-то, что будет отслеживать запросы / ответы (счетчик или что-то более сложное), чтобы вы знали, когда все ответы, которые вам нужны, получены.

Лучшее решение - эточасто для отправки только одного запроса, запрашивающего оба XML-документа, а сервер возвращает их одновременно в одном ответе.

1 голос
/ 23 февраля 2011

Сделайте оба запроса, затем проверьте, когда один из них завершил выполнение другого, и продолжите, если это так.

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() пока очередь не исчерпается.

Но если вы планируете иметь много одновременных запросов, вам, вероятно, все равно придется переделать свой сервис для пакетных операций.

...