Wie kann ich wiederverwenden, HttpClient-Verbindung effizient?

Mache ich HTTP-POSTs sehr Häufig (>= 1/sec), um ein API-Endpunkt und ich möchte sicherstellen, dass ich bin das tun es effizient. Mein Ziel ist es, erfolgreich zu sein oder fehlschlagen, so bald wie möglich, besonders, da ich eigenen code zu wiederholen fehlgeschlagene Beiträge. Es ist eine schöne Seite von HttpClient-performance-Tipps, aber ich bin mir nicht sicher, ob erschöpfend zu implementieren, Sie alle haben echte Vorteile. Hier ist mein code jetzt:

public class Poster {
  private String url;
  //re-use our request
  private HttpClient client;
  //re-use our method
  private PostMethod method;

  public Poster(String url) {
    this.url = url;

    //Set up the request for reuse.
    HttpClientParams clientParams = new HttpClientParams();
    clientParams.setSoTimeout(1000);  //1 second timeout.
    this.client = new HttpClient(clientParams);
    //don't check for stale connections, since we want to be as fast as possible?
    //this.client.getParams().setParameter("http.connection.stalecheck", false);

    this.method = new PostMethod(this.url);
    //custom RetryHandler to prevent retry attempts
    HttpMethodRetryHandler myretryhandler = new HttpMethodRetryHandler() {
      public boolean retryMethod(final HttpMethod method, final IOException exception, int executionCount) {
        //For now, never retry
        return false;
      }
    };

    this.method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, myretryhandler);
  }

  protected boolean sendData(SensorData data) {
    NameValuePair[] payload = {
      //...
    };
    method.setRequestBody(payload);

    //Execute it and get the results.
    try {
      //Execute the POST method.
      client.executeMethod(method);
    } catch (IOException e) {
      //unable to POST, deal with consequences here
      method.releaseConnection();
      return false;
    }

    //don't release so that it can be reused?
    method.releaseConnection();

    return method.getStatusCode() == HttpStatus.SC_OK;
  }
}

Wäre es sinnvoll, deaktivieren Sie die überprüfung auf veraltete Anschlüsse? Sollte ich auf der Suche mit der MultiThreadedConnectionManager? Natürlich, eigentliche benchmarking helfen würde, aber ich wollte überprüfen, ob mein code ist auf dem richtigen Weg ersten.

Es ist ironisch, dass ich verdient das Beliebte Frage-Abzeichen (1000+ views), obwohl es keine Antworten. Wenn Sie Vorschläge haben, zu beantworten, könnte dies ein guter Weg, um etwas verdienen Ruf. 😉
hc.apache.org/httpcomponents-client-ga/tutorial/html/...

InformationsquelleAutor pr1001 | 2010-02-10

Schreibe einen Kommentar