Comment puis-je réutiliser un HttpClient de connexion de manière efficace?
Je fais HTTP Postes très fréquemment (>= 1/s) à une API d'extrémité et je veux m'assurer que je suis en train de faire efficacement. Mon objectif est de réussir ou d'échouer dès que possible, surtout depuis que j'ai séparer le code pour les tentatives ont échoué Postes. Il y a une belle page de HttpClient conseils de performances, mais je ne suis pas sûr si de manière exhaustive les mettre en œuvre tous auront de réels avantages. Voici mon code maintenant:
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;
}
}
Serait-il judicieux de désactiver la case à cocher pour rassis connexions? Dois-je être à la recherche à l'aide de la MultiThreadedConnectionManager? Bien sûr, le réel de l'étalonnage de l'aide, mais je voulais vérifier si mon code est sur la bonne voie en premier.
hc.apache.org/httpcomponents-client-ga/tutorial/html/...
OriginalL'auteur pr1001 | 2010-02-10
Vous devez vous connecter pour publier un commentaire.
Beaucoup de l'impact sur les performances des connexions http, c'est d'établir la connexion de socket. Vous pouvez éviter cela en utilisant la fonction "keep-alive" les connexions http. Pour ce faire, il est préférable d'utiliser HTTP 1.1 et assurez-vous que "Content-Length: xx" est toujours dans les demandes et les réponses, "Connecction: fermer" est correctement réglé lorsque cela est approprié et qu'il est correctement suivies lors de la réception.
OriginalL'auteur karmakaze