因为我计划从v.3升级httpclient依赖项。第1至第4节。5.13,但后来我意识到,许多功能已经改变,其中之一就是多线程HttpConnectionManager已经从最新版本中删除。当我搜索一个等价类时,stackoverflow HttpClient 4中的一篇文章——多线程HttpConnectionManager发生了什么事?,建议使用PoolightTPClientConnectionManager类。但是,我想设置连接超时和套接字超时,PoolightTPClientConnectionManager不提供这些功能。
final MultiThreadedHttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager();
connectionManager.setMaxTotalConnections(150);
connectionManager.setMaxConnectionsPerHost(90);
connectionManager.setConnectionTimeout(15000);
connectionManager.setSoTimeout(600000);
有谁能建议在最近的httpclient v.4中如何设置连接超时和套接字超时。5.x?
这是我的代码:
java prettyprint-override"> private static class HttpPool {
private static CloseableHttpClient httpClient;
private static final int TIME_OUT = 30;
private static PoolingHttpClientConnectionManager cm;
public static void init() {
cm = new PoolingHttpClientConnectionManager();
cm.setDefaultMaxPerRoute(200);
cm.setMaxTotal(100);
cm.setDefaultMaxPerRoute(20);
HttpHost localhost = new HttpHost("locahost", 80);
cm.setMaxPerRoute(new HttpRoute(localhost), 50);
ConnectionKeepAliveStrategy kaStrategy = new DefaultConnectionKeepAliveStrategy() {
@Override
public long getKeepAliveDuration(HttpResponse response, HttpContext context) {
long keepAlive = super.getKeepAliveDuration(response, context);
if (keepAlive == -1) {
keepAlive = 0;
}
return keepAlive;
}
};
SocketConfig socketConfig = SocketConfig.custom()
.setSoKeepAlive(false)
.setSoLinger(1)
.setSoReuseAddress(true)
.setSoTimeout(TIME_OUT)
.setTcpNoDelay(true).build();
RequestConfig config = RequestConfig.custom()
.setConnectTimeout(TIME_OUT)
.setConnectionRequestTimeout(TIME_OUT)
.setSocketTimeout(TIME_OUT).build();
httpClient = HttpClients.custom()
.setConnectionManager(cm)
.setKeepAliveStrategy(kaStrategy)
.setDefaultRequestConfig(config)
.setDefaultSocketConfig(socketConfig)
.setRetryHandler((IOException exception, int executionCount, HttpContext context) -> false)
.build();
new Thread(() -> new Timer().schedule(new TimerTask() {
@Override
public void run() {
// Close expired connections
cm.closeExpiredConnections();
// Optionally, close connections
// that have been idle longer than 30 sec
cm.closeIdleConnections(30, TimeUnit.SECONDS);
}
}, 0, 5000)).start();
}
public static CloseableHttpClient getClient() {
if (httpClient == null) {
synchronized (HttpPool.class) {
if (httpClient == null) {
init();
}
}
}
return httpClient;
}
}
有些代码是从其他代码复制的,如果有错误,请指出
问题内容: 我正在使用PDO从MySQL服务器获取数据。我注意到的是:如果MySQL服务器不可用,则此代码返回异常 实际上 需要(相对)长的时间: 如果使用MySQL,则发生异常(SQLSTATE [HY000] [2003]无法在…上连接到MySQL服务器)仅需2分钟以上,而在PostgreSQL上则需要30秒(SQLSTATE [08006] [7]超时已过期) )。 我尝试使用PDO ::
我知道volley有一个重试策略,但我知道,这是针对套接字超时,而不是连接超时,Apache HttpClient有setConnectionTimeout和setSoTimeout方法,有人知道我是否要为volley framework设置连接超时吗。
很容易说它是重复的,但它不是。 我读过许多关于如何在中设置连接超时的帖子,但是这些帖子已经有4-7年的历史了,我认为我们都需要更新这个主题,因为这些方法已经不被推荐或者不再存在了。 所以问题是,当我等待服务器的响应时,如何设置连接超时?
问题内容: 在jersey 1中,我们在类中具有一个函数setConnectTimeout。 在球衣2中,缺少此功能的地方使用该类。 如何在jersey 2.x中设置连接超时并读取超时? 问题答案: 下面的代码在Jersey 2.3.1中对我有用(灵感在这里找到:https :
在泽西1中,我们在类中有一个函数setConnectTimeout。 在jersey 2中,类用于缺少此函数的地方。 如何设置连接超时和读取超时在泽西2. x?
为(默认)WebClient设置(连接)超时的正确方法是什么? 仅仅在得到的单声道(或通量)上使用方法就够了吗?还是这会导致可能的内存/连接泄漏? 提前道谢! (Spring5WebFlux的答案是如何在Webclient上设置超时的,但不起作用!)