Apache Commons http эффективность клиента - PullRequest
6 голосов
/ 15 июня 2010

Я использую http-клиент apache commons для отправки данных по почте каждую секунду, есть ли способ сделать следующий код более эффективным? Я знаю, что http не имеет состояния, но есть ли что-то, что я могу сделать, чтобы улучшить, так как в этом случае базовый URL-адрес всегда одинаков (меняется только значение параметра.

private void sendData(String s){ 
      try
         {
              HttpClient client = getHttpClient();


              HttpPost method = new HttpPost("http://192.168.1.100:8080/myapp");
              System.err.println("send to server "+s);
              List formparams = new ArrayList();
              formparams.add(new BasicNameValuePair("packet", s));

              UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, "UTF-8");
              method.setEntity(entity);

              HttpResponse resp=client.execute(method);
              String res = EntityUtils.toString(resp.getEntity());
              System.out.println(res);

         }
         catch (Exception e)
         {
              e.printStackTrace();

         }
    }
 private HttpClient getHttpClient() {
  if(httpClient==null){
   httpClient = new DefaultHttpClient();
  }
  return httpClient;
 }

Ответы [ 2 ]

2 голосов
/ 15 июня 2010

Используйте многопоточный менеджер соединений,

http://hc.apache.org/httpclient-3.x/threading.html#MultiThreadedHttpConnectionManager

Это улучшит поддержание активности и увеличит вероятность того, что ваше соединение будет готово каждую секунду, поэтому у вас нетвосстановить TCP-соединение.

1 голос
/ 15 июня 2010

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

Другой подход, на который стоит обратить внимание, - это подход Comet , при котором HTTP-соединение остается открытым для сервера, а информация постепенноотправил через это соединение. Вот интересная статья с примерами.

...