- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我一直在尝试使用 Apache HttpClient (4.1.3) 和 ThreadSafeClientConnManager 实现连接池。当我尝试设置路由的最大连接数时,我遇到了一个问题。基本上我遵循 hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html 中的示例。例如,我想将每个路由的默认连接设置为 10 个,将某些路由的默认连接设置为 5 个连接。
ThreadSafeClientConnManager cm = new ThreadSafeClientConnManager(schemeRegistry);
cm.setMaxTotal(30);
cm.setDefaultMaxPerRoute(10);
HttpHost host = new HttpHost("hc.apache.org", 80, "http");
cm.setMaxForRoute(new HttpRoute(host, null, false), 5);
DefaultHttpClient httpClient = new DefaultHttpClient(cm);
然后我在线程中执行请求:
public void run() {
try {
HttpResponse response = this.httpClient.execute(this.httpget, this.context);
HttpEntity entity = response.getEntity();
if (entity != null) {
// do something useful with the entity
}
// ensure the connection gets released to the manager
EntityUtils.consume(entity);
} catch (Exception ex) {
this.httpget.abort();
}
}
并获取如下日志:
DEBUG Thread-0 [org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager]: Get connection: HttpRoute[{}->http://hc.apache.org], timeout = 10000
DEBUG Thread-4 [org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager]: Get connection: HttpRoute[{}->http://hc.apache.org], timeout = 10000
DEBUG Thread-1 [org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager]: Get connection: HttpRoute[{}->http://hc.apache.org], timeout = 10000
DEBUG Thread-7 [org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager]: Get connection: HttpRoute[{}->http://hc.apache.org], timeout = 10000
DEBUG Thread-3 [org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager]: Get connection: HttpRoute[{}->http://hc.apache.org], timeout = 10000
DEBUG Thread-5 [org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager]: Get connection: HttpRoute[{}->http://hc.apache.org], timeout = 10000
DEBUG Thread-8 [org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager]: Get connection: HttpRoute[{}->http://hc.apache.org], timeout = 10000
DEBUG Thread-2 [org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager]: Get connection: HttpRoute[{}->http://hc.apache.org], timeout = 10000
DEBUG Thread-6 [org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager]: Get connection: HttpRoute[{}->http://hc.apache.org], timeout = 10000
DEBUG Thread-0 [org.apache.http.impl.conn.tsccm.ConnPoolByRoute]: [HttpRoute[{}->http://hc.apache.org]] total kept alive: 0, total issued: 0, total allocated: 0 out of 30
DEBUG Thread-0 [org.apache.http.impl.conn.tsccm.ConnPoolByRoute]: No free connections [HttpRoute[{}->http://hc.apache.org]][null]
DEBUG Thread-0 [org.apache.http.impl.conn.tsccm.ConnPoolByRoute]: Available capacity: 10 out of 10 [HttpRoute[{}->http://hc.apache.org]][null]
DEBUG Thread-0 [org.apache.http.impl.conn.tsccm.ConnPoolByRoute]: Creating new connection [HttpRoute[{}->http://hc.apache.org]]
为什么我获得此路线的可用容量:10 分(共 10 分)
,而不是我指定的 5 分?
谢谢
UPD:如果我在创建连接管理器后运行此语句 cm.getMaxForRoute(new HttpRoute(host, null, false))
,它将返回 5。但是,如果我尝试检查线程中路由的最大连接数(在获得响应后):
HttpHost target = (HttpHost) context.getAttribute(ExecutionContext.HTTP_TARGET_HOST);
cm.getMaxForRoute(new HttpRoute(target));
连接管理器将返回与日志中相同的内容(10 个连接)。
如果有任何帮助,我将不胜感激。
最佳答案
这很奇怪,但当我创建不带端口和协议(protocol)参数的 HttpHost
时,效果很好。
HttpHost host = new HttpHost("hc.apache.org");
HttpRoute route = new HttpRoute(httpHost);
conman.setMaxPerRoute(route, 13);
PS:我使用过httpclient-4.2
关于java - setMaxForRoute 在 ThreadSafeClientConnManager 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10673517/
我正在使用 ThreadSafeClientConnManager 在 Android 的后台线程中执行同步请求,设置为: HttpParams params = new BasicHttpParam
有人要求我修复位于两个应用程序之间的 Servlet。它的目的是将 SAML 授权请求与 SAML v2.0/SAML 1.1 相互转换。所以它: 从一个应用程序接收 HTTP SAML v2.0 授
我正在使用由 ThreadSafeClientConnManager (Apache httpcomponents 4.1.1) 创建的连接。响应是分块的(我期望),这是由 response.getE
我正在使用 httpcomponents 4.1.2 并且 ThreadSafeClientConnManager 连接不足。与旧的公共(public) HttpClient 不同,似乎没有任何方法可
我无法模拟一个类(使用 PowerMock 的 createMock 方法)。此类正在其构造函数中创建 ThreadSafeClientConnManager 类的对象。我在调用传递我的类名的 cre
对于我当前的应用程序,我从不同的“事件”中收集图像供应商”在西类牙。 Bitmap bmp=null; HttpGet httpRequest = new HttpGet(strURL);
我知道 ThreadSafeClientConnManager 使用连接池,当客户端需要连接时,从中选择一个连接。相反,SingleClientConnManager 仅使用一个连接。 我想了解的是:
我一直在尝试使用 Apache HttpClient (4.1.3) 和 ThreadSafeClientConnManager 实现连接池。当我尝试设置路由的最大连接数时,我遇到了一个问题。基本上我
我正在使用 ThreadSafeClientConnManager管理客户端连接池,因为我的应用程序有多个线程,它们同时连接到网络服务器。 摘要示例代码: HttpClient httpClient;
我用两种不同的方式定义 HttpClient:1. 普通: client = new DefaultHttpClient();2.线程安全: DefaultHttpClient getThreadSa
我正在使用 ThreadSafeClientConnManager 在 Java 应用程序中进行多线程处理。我的 ThreadSafeClientConnManager 对象是静态的,因此它会一直保留
对于 ThreadSafeClientConnManager.requestConnection(HttpRoute route, Object state),第二项“state”应该是什么? 最终,
HttpParams params = new BasicHttpParams(); ConnManagerParams.setMaxConnectionsPerRoute(params, n
我的log4j 属性文件 log4j.logger.devpinoyLogger=DEBUG, dest1, log4j.appender.dest1=org.apache.log4j.Rolling
我正在将我的代码移植到 android 6.0。由于 apache 类已在 API 23 中弃用并删除,因此我无法找到与之前的代码完全匹配的代码来建立 HTTPS 连接。以下是我的代码 try {
我为我的 android 应用程序集成了 twilio api,但是每当运行我的 android 应用程序时我都会遇到以下错误。 java.lang.NoSuchMethodError:org.apa
我是一名优秀的程序员,十分优秀!