gpt4 book ai didi

java - 如何测试我的 httpClient 是否可以关闭空闲连接?

转载 作者:行者123 更新时间:2023-11-30 09:13:29 25 4
gpt4 key购买 nike

我在我的项目中使用 http-client 4.3.x。为了关闭“空闲”连接,我启动了一个线程来监视连接池,并尝试每隔一秒关闭空闲30秒的连接。

连接管理器:

PoolingHttpClientConnectionManager connectionManager = 
new PoolingHttpClientConnectionManager(registry);

监视它并关闭空闲连接的线程:

class ClosingIdleConnectionThread extends Thread {
private final PoolingHttpClientConnectionManager connectionManager;
private final int timeout;

public ClosingIdleConnectionThread(PoolingHttpClientConnectionManager connectionManager, int timeout) {
this.connectionManager = connectionManager;
this.timeout = timeout;
}

@Override
public void run() {
while (!Thread.currentThread().isInterrupted()) {
connectionManager.closeIdleConnections(timeout, TimeUnit.MILLISECONDS);
connectionManager.closeExpiredConnections();
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
return;
}
}
}
}

但是现在我有两个问题:

  1. 实际上,我不确定“空闲”连接是什么意思
  2. 我必须编写一些测试来确保我的代码正常工作,但我不知道如何测试它

谢谢你的帮助~

最佳答案

(1) 如果持久连接还没有从池中租用,则认为它是空闲的。空闲 5 秒 = 5 秒未被租用。

(2) 这是一个艰难的过程。我在这里看到两个选项

  • 使用 PowerMock、检测 SocketImpl 抽象类并“监视”其 #close 方法。免责声明:我没有尝试过。这只是一个想法,它可能可行。

  • 使用 Mockito 或类似工具包监视 PlainConnectionSocketFactory实例代替。向连接池管理器注册 Mockito 增强实现。计算 #connectSocket 方法被调用了多少次。如果在长时间不活动后在新的连接租用时调用该方法,这基本上意味着以下两种情况之一:池为空或空闲连接未处于可重用状态。这不是一个完美的测试,但它可能更容易实现,因为它不需要 PowerMock 的类加载器魔法。

关于java - 如何测试我的 httpClient 是否可以关闭空闲连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21018653/

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