setConnectTimeout 和 setConnectionRequestTimeout 什么区别?-httpclient5
setConnectTimeout 和 setConnectionRequestTimeout 是在网络编程里常见的设置超时时间的方法,不过它们的作用对象和具体含义有所不同。下面以 Java 语言中的 HttpClient 为例进行说明。1. setConnectTimeout
此方法用来设置建立与目标服务器的连接时的超时时间。要是在规定时间内无法建立连接,就会抛出
ConnectTimeoutException 异常。
示例代码如下:
java
import java.io.IOException;
import java.net.ConnectException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.concurrent.TimeUnit;
public class ConnectTimeoutExample {
public static void main(String[] args) {
try {
URL url = new URL("http://example.com");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
// 设置连接超时时间为 5 秒
connection.setConnectTimeout((int) TimeUnit.SECONDS.toMillis(5));
connection.connect();
System.out.println("Connected successfully!");
} catch (ConnectException e) {
System.out.println("Connection timed out: " + e.getMessage());
} catch (IOException e) {
System.out.println("Error occurred: " + e.getMessage());
}
}
}
在上述代码中,
setConnectTimeout 方法将连接超时时间设定为 5 秒。要是在 5 秒内无法和目标服务器建立连接,就会抛出 ConnectException 异常。2. setConnectionRequestTimeout
该方法用于设置从连接池获取连接的超时时间。在使用连接池时,若所有连接都处于繁忙状态,请求需要等待空闲连接。若在指定时间内未能获取到连接,就会抛出异常。
示例代码如下:
java
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import java.io.IOException;
public class ConnectionRequestTimeoutExample {
public static void main(String[] args) {
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
cm.setMaxTotal(100);
cm.setDefaultMaxPerRoute(20);
RequestConfig config = RequestConfig.custom()
// 设置从连接池获取连接的超时时间为 3 秒
.setConnectionRequestTimeout(3000)
.build();
CloseableHttpClient httpClient = HttpClients.custom()
.setConnectionManager(cm)
.setDefaultRequestConfig(config)
.build();
try {
// 执行 HTTP 请求
// ...
} catch (Exception e) {
System.out.println("Error occurred: " + e.getMessage());
} finally {
try {
httpClient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
在上述代码中,
setConnectionRequestTimeout 方法把从连接池获取连接的超时时间设置为 3 秒。要是在 3 秒内无法从连接池获取到空闲连接,就会抛出异常。总结
setConnectTimeout:设置的是建立物理连接的超时时间,针对的是客户端与服务器之间的网络连接过程。setConnectionRequestTimeout:设置的是从连接池获取连接的超时时间,针对的是使用连接池管理连接的场景。
摘抄自网络,便于检索查找。

浙公网安备 33010602011771号