gpt4 book ai didi

java - 从 ThreadSafeClientConnManager 连接池取消/中止连接

转载 作者:太空狗 更新时间:2023-10-29 12:58:55 30 4
gpt4 key购买 nike

我正在使用 ThreadSafeClientConnManager管理客户端连接池,因为我的应用程序有多个线程,它们同时连接到网络服务器。

摘要示例代码:

HttpClient httpClient;
ClientConnectionManager conMgr = new ThreadSafeClientConnManager(parameters,schReg);
httpclient = new DefaultHttpClient(conMgr, parameters);

现在可以说这个线程中的一个正在下载一个大文件,但是我的应用程序的用户正在切换到另一个 Activity/屏幕。因此该文件是不需要的,我想中止此下载连接。

ThreadSafeClientConnManager我找到了这个方法:

public ClientConnectionRequest requestConnection(HttpRoute 路由,对象状态)返回一个新的 ClientConnectionRequest,从中可以获得 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")) 或者我的服务器是什么,但是要为 Object state 添加什么>?

其次,一旦有了 ClientConnectionManager,我就可以调用 getConnection(long timeout, TimeUnit tunit)。但是从那里开始,我如何执行我的 HttpGet httpRequest = new HttpGet(URL_TO_FILE); 就像我之前使用 HttpResponse response = (HttpResponse) httpclient.execute(httpRequest);?

我已经阅读了文档并尝试了很多不同的东西,但我无法获得有效的解决方案。因此,我们非常欢迎任何建议和/或代码示例。

最佳答案

您只需调用 httpRequest.abort() 即可关闭连接。

对于大文件,您必须使用循环处理数据。您可以只检查取消状态并从那里中止,

    HttpEntity entity = response.getEntity();
if (entity != null) {
InputStream instream = entity.getContent();
while (instream.read(buf) >= 0) {
if (cancelled)
httpRequest.abort();
// Process the file
}
}

当使用池或keepalive时,中止的连接不能返回到池中,必须关闭。旧版本中存在一个错误,即连接保持 Activity 状态并且会扰乱下一个请求。我认为这一切都是固定的。

关于java - 从 ThreadSafeClientConnManager 连接池取消/中止连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1565349/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com