Я использую апачское свободное городское население http клиент для отправки данных по почте каждую секунду, есть ли способ сделать следующий код более эффективным? Я знаю, что 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; }
Используйте диспетчер многопоточных соединений,
http://hc.apache.org/httpclient-3.x/threading.html#MultiThreadedHttpConnectionManager
Это улучшит сохранение -alive и повышайте вероятность того, что ваше соединение будет готово каждую секунду, поэтому вам не нужно повторно устанавливать TCP-соединение.
Если вам нужно отправлять запрос и получать ответ каждую секунду, то да, это почти все, что вы можете сделать. Однако, да, это будет использовать достаточное количество ресурсов.
Еще один подход, который можно рассмотреть, - это подход Comet, при котором HTTP-соединение остается открытым с сервером, и информация постепенно отправляется по этому соединению. Вот интересная статья с примерами.