当前位置: 首页 > 知识库问答 >
问题:

在以下使用PoolightTPClientConnectionManager的Apache HttpClient中,资源清理是如何完成的?

胡俊弼
2023-03-14

提到的代码在codereview论坛的这个问题下。

当您执行此HttpClientPool时。getClient()。execute(request),r)在query方法中,您已经使用客户端发送了HttpRequest。。你不需要释放/清理任何资源吗?

监视器线程

while ((stopRequest = stopSignal.poll(5, TimeUnit.SECONDS)) == null) {
      // Close expired connections
      cm.closeExpiredConnections();
      // Optionally, close connections that have been idle too long.
      cm.closeIdleConnections(60, TimeUnit.SECONDS);
      // Look at pool stats.
      log.trace("Stats: {}", cm.getTotalStats());
    }

足以释放从池中获取的客户端使用的连接。

几个问题:

  • 这是否意味着我们让连接过期或闲置,以便池回收它们

对于业余爱好者的问题,我很抱歉。我是HttpClient的新手。

共有1个答案

华宏逸
2023-03-14

主要清理发生在readACK方法中,其中content.close();然后是response.close();

该机制的核心是:

    // Start a conversation.
    CloseableHttpResponse response = HttpClientPool.getClient().execute(request);

getClient()从客户端池中提取CloseableHttpClient。这实际上是一个Singleton线程安全客户端,因此不需要整理,它在内部管理多个用途。

执行执行请求并返回CloseableHttpACK进行解析和处理。这是通过在readSecurity调用关闭来清理的。请注意,它在last子句中关闭,以确保它不会泄漏。

    // Roll out the results
    HttpEntity entity = response.getEntity();
    if (entity != null) {
      InputStream content = entity.getContent();

readACK中,创建了一个新的InputStream来收集响应的内容-这也通过last子句中的闭包正确清理。

空闲线程只用于挂起意外事件留下的连接,它肯定不是主要的清理机制。

 类似资料:
  • 我们在使用Akka HTTP构建的web服务器上遇到了奇怪的内存行为。我们的架构是这样的: Web服务器路由调用各种参与者,为将来获取结果并将其流式传输到响应 参与者调用非阻塞操作(使用期货),组合和处理从中提取的数据,并将结果传送给发送者。我们使用标准的Akka Actor,实现它的receive方法(不是Akka键入的) 应用程序中的任何地方都没有阻止代码 当我在本地运行web服务器时,一开始

  • 本文向大家介绍如何快速清理 docker 资源的方法,包括了如何快速清理 docker 资源的方法的使用技巧和注意事项,需要的朋友参考一下 如果经常使用 docker,你会发现 docker 占用的资源膨胀很快,其中最明显也最容易被察觉的应该是对磁盘空间的占用。本文将介绍如何快速的清理 docker 占用的系统资源,具体点说就是删除那些无用的 镜像、容器、网络和数据卷。 查看 docker 占用的

  • 我试图完全清理资源组在Azure。 删除资源组不是选项(访问权限:参与者,而不是所有者) 做到这一点的最优雅和明显的方法(也在一些文章中描述)是使用“空”部署模板执行完整的部署: 删除SQL Server开始“...”接受“...”失败“...”开始“...”接受“...”失败“... 你想到主意了。 其他时候效果很好。 您将得到数据库删除的无限循环“开始..接受..失败..开始..接受..失败.

  • 我想做的是用httpclient下载一个文件。目前我的代码如下。 我的下载URL如下所示:http://example.com/file/afz938f348dfa3 正如你可以看到没有扩展名的文件(至少在网址)然而,当我去一个正常的浏览器网址,它下载文件asdasdaasda.txt或asdasdasdsd.pdf(名称是不同的url和extenstion并不总是相同的,取决于我试图下载什么)。

  • 环境:JSF2.1.7Seam2.3.0JBoss5.1.2 我的应用程序有一个需要本地化的字符串 “我同意WorldSite的隐私政策和Cookie通知” 斜体的隐私政策和Cookie通知是指向其他页面的超链接。 最初我们的facets是这样设置的: 注意:我们已经准备好了URL重写,需要/jsf/Notice。xhtml并重写为 这允许对各个键进行零碎的转换 但这需要一些语言的变通方法(在“i

  • 问题内容: 我正在尝试将json对象导入变量。我根据教程使用服务。 我收到意外的令牌错误,因为我不应该使用 -但我真的不知道该使用什么。我用谷歌搜索了3个小时,发现只有$ http。或$ json。答案,但是我觉得可以做得更容易-更清晰。 (完美的解决方案是; D 服务文件: 控制器文件: json文件(几乎; D) 编辑: 我将$ resource(’file.json更改为https://ww