《HttpClient官方文档》2.5 连接驱逐策略
2023-03-14 22:27:42 时间
2.5. 连接驱逐策略
经典阻塞I / O模型的主要缺点之一是网络套接字只有在I / O操作阻塞时才能对I / O事件作出反应。当连接释放回管理器时,它可以保持活动,但是它无法监视套接字的状态,并对任何I / O事件做出反应。如果服务器端关闭连接,客户端这边的连接将无法察觉连接状态的变化(并且在通过在末端关闭套接字来做出适当地对应)。
HttpClient通过测试连接是否为“stale”,希望能够缓解使用连接来执行HTTP请求之前,由于服务器端关闭了这个连接使得它不再有效的问题。对连接是否过时的检查不是 100%可靠的。用于闲置连接的不涉及每套接字一线程模型的唯一可行解决方案是用监视器线程来收回由于长时间不活动而被认为过期的连接。监视器线程可以定期调用ClientConnectionManager#closeExpiredConnections()方法关闭所有过期的连接并从连接池中驱逐已关闭的连接。它还可以调用ClientConnectionManager#closeIdleConnections()这个方法来关闭在给定时间段内所有闲置连接。
public static class IdleConnectionMonitorThread extends Thread { private final HttpClientConnectionManager connMgr; private volatile boolean shutdown; public IdleConnectionMonitorThread(HttpClientConnectionManager connMgr) { super(); this.connMgr = connMgr; } @Override public void run() { try { while (!shutdown) { synchronized (this) { wait(5000); // Close expired connections connMgr.closeExpiredConnections(); // Optionally, close connections // that have been idle longer than 30 sec connMgr.closeIdleConnections(30, TimeUnit.SECONDS); } } } catch (InterruptedException ex) { // terminate } } public void shutdown() { shutdown = true; synchronized (this) { notifyAll(); } } }
相关文章
- 2022年四款用于网络安全的优秀 Linux 开源防火墙
- Linux 中永久安全地删除“文件和目录”的三种方法
- 微软:Windows 11 流畅设计滚动条将引入到谷歌 Chrome 浏览器
- 新电脑到手后要做的几个优化配置 90%以上人都不知道
- Linux 下如何使用 vmstat 命令
- 微软承认某次系统更新会导致 Windows 10 PC 蓝屏死机,现已完成修复
- 如何构建用户态 Linux
- 在 Ubuntu 中定制简洁的 GNOME 桌面
- GNOME 42 发布:深色模式、新的截图界面
- 你真的会 Linux top 命令吗?
- 这款利器帮你查找和修复 Linux Shell 脚本错误
- Linux中的两种共享代码方式静态库和动态库
- 微软硬起来了 不支持TPM 2.0将无法安装最新版Windows 11系统
- 部分苹果 macOS Monterey 12.3 正式版用户遭遇蓝牙连接 Xbox 游戏控制器等问题
- Linux 5.18将剔除对Andes NDS32 CPU架构的支持
- OpenHarmony实战之视频编解码HDI的使用
- OpenHarmony 3GPP协议开发深度剖析之--PLMN业务源码解读
- Microsoft Edge浏览器即将迎来一系列PDF功能更新
- Windows 11 Build 22581发布:开放针对平板优化的任务栏体验
- Linux Bash Shell-小循环大用处