大佬教程收集整理的这篇文章主要介绍了java-取消/中止来自ThreadSafeClientConnManager连接池的连接 ,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用ThreadSafeClientConnManager来管理客户端连接池,因为我的应用程序具有多个线程,这些线程正在同时连接到Web服务器.
抽象示例代码:
httpClient httpClient;
ClientConnectionManager conMgr = new ThreadSafeClientConnManager(parameters,schReg);
httpclient = new DefaulthttpClient(conMgr,parameters);
现在,让我们说一下这些线程正在下载一个大文件,但是随后我的应用程序的用户正在切换到另一个活动/屏幕.因此该文件是不必要的,我想中止此下载连接.
在ThreadSafeClientConnManager中,我发现此方法:
公共ClientConnectionrequest requestConnection(httpRoute路由,对象状态)
返回一个新的ClientConnectionrequest,可以从中@L_717_10@managedClientConnection或中止该请求.
到目前为止,我一直在使用:
httpGet httprequest = new httpGet(URL_TO_FILE);
httpResponse response = (httpResponsE) httpclient.execute(httprequest);
[...]
现在,据我了解,我必须使用:
httpclient.getConnectionManager().requestConnection(httpRoute路由,对象状态);
这就是我被困住的地方.我假设对于路由,我只能使用New httpRoute(new httpHost(“ 10.0.0.1”))或我的服务器是什么,但是在对象状态下应该输入什么呢?
其次,一旦有了ClientConnectionManager,我就可以调用getConnection(长时间超时,TimeUnit tunit).但是从那以后,我该如何执行httpGet httprequest = new httpGet(URL_TO_FILE);就像我之前使用httpResponse response =(httpResponsE)httpclient.execute(httprequest);一样吗?
对于大文件,必须有一个循环处理数据.您只需检查取消状态并从那里取消,
httpentity entity = response.getEntity();
if (entity != null) {
InputStream instream = entity.getContent();
while (instream.read(buf) >= 0) {
if (cancelled)
httprequest.abort();
// Process the file
}
}
使用池或keepalive时,中止的连接无法返回到池中,必须将其关闭.在较旧的版本中存在一个错误,该错误使连接保持活动状态,并弄乱了下一个请求.我认为这是固定的.
以上是大佬教程为你收集整理的java-取消/中止来自ThreadSafeClientConnManager连接池的连接 全部内容,希望文章能够帮你解决java-取消/中止来自ThreadSafeClientConnManager连接池的连接 所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。