Делать одновременные веб-запросы в Java - PullRequest
3 голосов
/ 24 декабря 2010

Может ли кто-нибудь указать мне на фрагмент для выполнения параллельных веб-запросов? Мне нужно сделать 6 веб-запросов и объединить результат HTML.

Есть ли быстрый способ сделать это или я должен идти по пути?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 24 декабря 2010

Использование ExecutorService с Callable<InputStream>.

Пример запуска:

ExecutorService executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
Future<InputStream> response1 = executor.submit(new Request("http://google.com"));
Future<InputStream> response2 = executor.submit(new Request("http://stackoverflow.com"));
// ...
ByteArrayOutputStream totalResponse = new ByteArrayOutputStream();
copyAndCloseInput(response1.get(), totalResponse);
copyAndCloseInput(response2.get(), totalResponse);
// ...
executor.shutdown();

с

public class Request implements Callable<InputStream> {

    private String url;

    public Request(String url) {
        this.url = url;
    }

    @Override
    public InputStream call() throws Exception {
        return new URL(url).openStream();
    }

}

См. Также:

1 голос
/ 24 декабря 2010

Я рекомендую узнать о java.util.concurrent.ExecutorService . Он позволяет вам одновременно запускать задачи и хорошо работает для сценария, который вы описываете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...