使用HttpClient进行HTTP连接池

Joh*_*ohn 26 java httpclient pooling httpconnection

  • 如何使用HttpClient创建连接池?
  • 我必须经常连接到同一台服务器.是否值得创建这样的游泳池?
  • 是否可以保持实时连接并将其用于各种请求,如果是,我该怎么办?

我正在使用Apache HTTP Client开发Java .

小智 20

PoolingClientConnectionManager现在已经弃用了.从(4.3版)使用PoolingHttpClientConnectionManager.


eri*_*yen 20

我最近几天都在研究这个问题,所以我想与大家分享一些"众所周知"的知识.

首先,在处理同一服务器时,建议使用单个HTTP客户端来执行请求.在您的帮助下PoolingHttpClientConnectionManager,您的客户端可用于同时执行多个请求.可以在此处找到多线程请求执行的官方示例.

其次,HTTP/1.1(以及HTTP/1.0的增强版本)允许HTTP客户端在事务完成后保持连接打开,以便可以在将来的请求中重用它.这通常被称为持久连接.

此外,为了将客户端重用于多个请求,来自服务器的响应头通常包括一个属性调用Keep-Alive,该调用包含当前连接将保持活动的时间.除此之外,Apache Http Client还为您提供了一个界面ConnectionKeepAliveStrategy来自定义您自己的重用连接策略.

  • 只是想知道,在 4.x 之前,当您可以在“ConnectionConfig”中为每个“HttpClient”设置连接超时和套接字超时时,现在“PoolingHttpClientConnectionManager”中不存在它们。那么,如何设置超时呢?并且,在哪里设置“http.conn-manager.timeout”,即获取连接之前等待的时间? (2认同)

Tom*_*son 16

[假设Java和Apache的HttpClient]

使用ThreadSafeClientConnManager.将单个全局实例传递给每个HttpClient实例的构造函数.我认为将HttpClients本身集中在一起并不存在任何意义.

  • 它后来被`org.apache.http.impl.conn.PoolingHttpClientConnectionManager取代. (6认同)

Man*_*N V 15

现在不推荐使用ThreadSafeClientConnManager,而是使用PoolingClientConnectionManager.

  • 不推荐使用`PoolingClientConnectionManager`,使用[PoolingHttpClientConnectionManager](http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/impl/conn/PoolingHttpClientConnectionManager.html)(你好,从2015年开始) (30认同)

ser*_*aev 8

对于HttpClient 4x:

ThreadSafeClientConnManager ...管理客户端连接池,并且能够为来自多个执行线程的连接请求提供服务.

连接以每个路由为基础进行池化.管理员已经在池中提供持久连接的路由请求将通过从池租用连接而不是创建全新连接来提供服务.

http://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html