Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java PoolgClientConnectionManager如何关闭套接字_Java_Apache Httpclient 4.x - Fatal编程技术网

Java PoolgClientConnectionManager如何关闭套接字

Java PoolgClientConnectionManager如何关闭套接字,java,apache-httpclient-4.x,Java,Apache Httpclient 4.x,此问题与PoolgClientConnectionManager(HttpClient 4.2.5 API)有关 我在池中最多有5个远程连接,还有20多个url列表可供下载文件。下载文件后,我释放连接。但我没有给出任何超时值。从5个不同的URL下载文件后会发生什么。我想我从文档中收集到的信息是,第6个文件在客户端检测到连接已从其端关闭之前不会开始下载。是这样吗?从URL下载文件后,如何关闭套接字。请注意,我从中下载文件的所有URL都位于不同的服务器上。根据 正确的方法是 } finally {

此问题与PoolgClientConnectionManager(HttpClient 4.2.5 API)有关

我在池中最多有5个远程连接,还有20多个url列表可供下载文件。下载文件后,我释放连接。但我没有给出任何超时值。从5个不同的URL下载文件后会发生什么。我想我从文档中收集到的信息是,第6个文件在客户端检测到连接已从其端关闭之前不会开始下载。是这样吗?从URL下载文件后,如何关闭套接字。请注意,我从中下载文件的所有URL都位于不同的服务器上。

根据

正确的方法是

} finally {
  // Release the connection.
  method.releaseConnection();
}  
文档还提到,为了强制关闭连接,最简单的方法是覆盖connectionManager,在您的案例中,它是PoolgClientConnectionManager


如果您查看当前的代码,可以看到您可以更改releaseConnection方法。具体更改第255行,以便在连接打开时将其关闭。

将连接释放回管理器并不保证立即处理。管理器很可能会尝试保持连接处于活动状态。这里有两个选项(1)正如您正确指出的那样,您可能希望实现一个自定义连接,在连接释放时不加区别地关闭连接,或者(2(建议)实现自定义逐出策略,以在特定的非活动期后逐出持久连接,如HttpClient中所述

,因此我已经这样做了。但是在文档的某个地方,它还说,在释放连接后,连接将返回到管理器,但不会关闭。在我的场景中,在我下载了5个文件之后,将有5个与管理器的连接指向5个不同的服务器。但是,现在,当我想下载第6个文件时,池中没有任何免费连接可以连接到第6个服务器,我必须等待客户端关闭连接(在我的情况下,连接超时=0)。我的想法正确吗?很抱歉,我不明白为什么你认为“释放连接”和“关闭连接”是不同的。“释放”连接的原因是为了可以重复使用。顺便说一句,是客户端正在“释放”连接重用以联系同一服务器还是其他服务器?我的意思是,释放连接后,套接字会关闭还是保持活动状态?啊,在这种情况下,你可以调用getConnectionManager(),然后调用closeIdleConnections(长空闲时间,时间单位tunit),但为此,我需要创建另一个线程,对吗?我无法在不关闭空闲连接的情况下执行此操作。我的意思是,我已经下载了文件并释放了连接,那么为什么我不能将其与其他服务器重复使用呢?下载5个文件后我会被卡住吗?