Может отправлять только 10 HTTP POST запросов в секунду?

#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);
  

требуется время, и если вы хотите увеличить количество сообщений, я бы использовал набор потоков для запросов (пул потоков)