#java #http
#java #http
Вопрос:
Это может показаться странной проблемой, но я пытаюсь отправить как можно больше HTTP POST запросов в течение нескольких секунд. интервал.
Мне интересно, есть ли у кого-нибудь какие-либо советы, поскольку в настоящее время я получаю только около 6-9 запросов в секунду, что кажется довольно низким. Мой код выглядит следующим образом — я использую HTTP-библиотеку Apache Commons:
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
long start = System.currentTimeMillis();
long end = start 4000;
int count = 0;
while (System.currentTimeMillis() < end)
{
count ;
httpClient.executeMethod(method);
}
System.out.println((double)count/4 " reqs / sec");
Метод post создается один раз заранее:
String body= getBodyString();
PostMethod method = new PostMethod(Url);
method.setRequestEntity( new StringRequestEntity(body));
method.setRequestHeader(...etc)
Я предполагаю, что существует какое-то неотъемлемое последовательное поведение, при котором httpclient ожидает ответа? В моем случае меня не волнует ответ, поэтому, по-видимому, есть способ улучшить скорость вызовов. Возможно, я могу подготовить следующий запрос, Пока он отправляется и т. Д. Также может ли быть более эффективная и быстрая библиотека?
Я новичок в этом типе кода, поэтому прошу прощения, если этот вопрос не имеет особого смысла.
Комментарии:
1. Ваш заголовок, несомненно, создает впечатление, что это будет сделано для злонамеренных целей…
2. Я могу заверить вас, что он не предназначен для чего-либо вредоносного.
Ответ №1:
Используй потоки, Люк!
Ваш клиент ограничен средним временем отклика сервера. Если сервер отвечает в течение 100 миллисекунд, вы никогда не превысите 10 запросов в секунду.
Однако, если вы отправляете 10 запросов одновременно, и сервер способен обрабатывать их одновременно с одинаковым временем отклика, вы сразу достигли 100 запросов в секунду.
Если вы хотите провести стресс-тестирование своего приложения, есть несколько хороших бесплатных инструментов, таких как JMeter или ab. Если вы буквально спамите чужой сайт: позор вам. И, скорее всего, их сетевая инфраструктура скоро отключит вас.
Ответ №2:
Почему бы не выполнить каждое сообщение в отдельном потоке? инструкция:
httpClient.executeMethod(method);
требуется время, и если вы хотите увеличить количество сообщений, я бы использовал набор потоков для запросов (пул потоков)