2015-09-24 2 views
3

Я работаю над сервером Java, которому необходимо отправить несколько запросов HTTP get на другой сервер и обработать ответы и завершить их. В настоящее время я использую synchronous способ сделать это, как и в Java:Как ускорить обработку нескольких HTTP-запросов

for(Request request: requestList){ 
    Response response = client.send(request); 
} 

Это работает, но это занимает много времени, если размер по requestList «s большой, так как он делает это последовательно: отправить запрос, подождите для ответа, а затем отправить дальше.

Мне интересно, есть ли способ ускорить это? Я думаю, если использование нескольких потоков для отправки нескольких запросов будет делать трюк? Или, может быть, нет, поскольку общее время отклика фиксируется для определенного количества запросов.

Любая идея или объяснение, почему или почему это не будет работать, будет полезно. Я использую Java.

+0

Несколько потоков будут делать трюк. Я сделал это раньше, и все получилось нормально. Тем не менее, это было как 4 запроса, больше, чем я действительно не знаю ... Сколько у вас элементов в цикле? –

+0

Любые объяснения? Скажем, я отправляю 2 запроса, время ответа для одного запроса - 10 секунд. Тогда независимо от того, какую стратегию я использую, для получения ответа 2 всегда требуется 20 секунд, правильно? – byteBiter

+0

Может быть размером 50. – byteBiter

ответ

1

Если вы используете Java 8, вы можете попробовать lambdas для параллельного потока.

requestList.parallelStream().forEach(....); 

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

Другие решения - использовать потоки. Но вы должны ограничить количество потоков (пул потоков) для каждого цикла (пользователя). Конечно, это зависит от того, сколько у вас ресурсов.

Смежные вопросы