Comment résoudre le problème de délai d'attente des requêtes HTTP dans le développement Java
Dans le développement Java, les requêtes HTTP avec des services externes sont souvent impliquées. Cependant, en raison de la complexité de l’environnement réseau et de la stabilité des services externes, nous rencontrons souvent des délais d’expiration des requêtes HTTP. Lorsque nous rencontrons le problème de délai d’expiration des requêtes HTTP pendant le développement, comment devons-nous le résoudre ? Cet article vous présentera plusieurs solutions.
URL url = new URL("http://example.com"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(5000); // 连接超时时间为5秒 conn.setReadTimeout(5000); // 读取超时时间为5秒
De cette façon, nous pouvons raisonnablement ajuster le délai d'expiration en fonction de la situation réelle pour éviter Problème de délai d'expiration de la requête HTTP.
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(); // 设置最大连接数 cm.setMaxTotal(100); // 设置每个路由的最大连接数 cm.setDefaultMaxPerRoute(20); HttpClient client = HttpClientBuilder.create() .setConnectionManager(cm) .build(); HttpGet request = new HttpGet("http://example.com"); HttpResponse response = client.execute(request);
En utilisant le pooling de connexions, nous pouvons éviter d'établir et de libérer fréquemment des connexions HTTP, réduisant ainsi la surcharge de connexion, améliorant les performances et réduisant la possibilité d'expiration du délai de requête HTTP. .
HttpRequestRetryHandler retryHandler = new DefaultHttpRequestRetryHandler(3, true); CloseableHttpClient client = HttpClientBuilder.create() .setRetryHandler(retryHandler) .build(); HttpGet request = new HttpGet("http://example.com"); HttpResponse response = client.execute(request);
En définissant une nouvelle tentative de demande, nous pouvons améliorer la stabilité des requêtes HTTP, réduisant ainsi le problème des délais d'attente des requêtes HTTP.
CloseableHttpAsyncClient asyncClient = HttpAsyncClients.custom().build(); asyncClient.start(); HttpGet request = new HttpGet("http://example.com"); asyncClient.execute(request, new FutureCallback<HttpResponse>() { @Override public void completed(HttpResponse response) { // 处理响应结果 } @Override public void failed(Exception ex) { // 处理请求失败的情况 } @Override public void cancelled() { // 处理请求取消的情况 } });
En utilisant des requêtes asynchrones, nous pouvons éviter de bloquer le thread principal, améliorer la simultanéité du programme et réduire le risque d'expiration des délais de requête HTTP.
Résumé :
Dans le développement Java, lorsque vous rencontrez des problèmes de délai d'expiration des requêtes HTTP, vous pouvez les résoudre en ajustant le délai d'attente, en utilisant des pools de connexions, en utilisant des mécanismes de nouvelle tentative de requête et en utilisant des requêtes asynchrones. Différentes solutions peuvent être sélectionnées et combinées en fonction de la situation spécifique. En gérant raisonnablement les problèmes de délai d'attente des requêtes HTTP, nous pouvons améliorer la stabilité et les performances du programme et offrir une meilleure expérience utilisateur.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!