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.
hc.apache.org/httpcomponents-client-ga/tutorial/html/...
InformationsquelleAutor pr1001 | 2010-02-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Viel von der Leistung Treffer von http-verbindungen wird der Aufbau der socket-Verbindung. Sie können dies vermeiden, indem mittels "keep-alive" von http-verbindungen. Um dies zu tun, ist es am besten, um HTTP 1.1 verwenden und stellen Sie sicher, dass "Content-Length: xx" ist immer wieder in Anfragen und Antworten, "Connecction: close" ist richtig gesetzt, wenn die entsprechende und korrekt gehandelt, wenn Sie empfangen.
InformationsquelleAutor karmakaze