关于HttpClient的配置

简介:
1、超时
超时的配置很容易忘记。而一旦忘记了,后果可能是一个请求无休止的链接而不释放。占用资源,并且会阻塞后续逻辑。
Httpclient的超时有两种:ConnectionTimeout,和SoTimeout。前者是一个请求在建立连接过程中等待的最长时延;后者是请求建立后等待数据往返的最长时延。
二者的超时时间配置方法是:
HttpConnectionManagerParams managerParams = client
                    .getHttpConnectionManager().getParams();
// 设置连接超时时间(单位毫秒)
managerParams.setConnectionTimeout(10000);
// 设置设置socket超时时间(单位毫秒)
managerParams.setSoTimeout(10000);
当发生超时的时候,二者分别会抛出org.apache.commons.httpclient.ConnectTimeoutException和java.net.SocketTimeoutException。

2.释放连接
这个不太容易忘记,只是释放连接的语句位置会被忽略。
配置语句是:
PostMethod method = new PostMethod(url);
method.releaseConnection();
要注意的是,method.releaseConnection();一定要放在finnaly语句块中,以保证即使发生异常,也会正常释放链接。

3、编码格式
这个就简单啦,就这一句:
method.getParams().setParameter(
                    HttpMethodParams.HTTP_CONTENT_CHARSET, "GBK");
当然,GBK可以换成其它合法的编码格式代码。

4、java.net.SocketException: Too many open files的问题
据说(未验证),HttpClient本身存在远程请求不释放socket的问题。在大量并发的情况下,可能导致linux文件句柄用完, 从而系统报错:java.net.SocketException: Too many open files.
解决这个问题的方法,是对HttpClient增加两个配置:
HttpClient client = new HttpClient();
// 配置1:
client.getParams().setBooleanParameter("http.protocol.expect-continue", false);
// 配置2:

method.addRequestHeader("Connection", "close");



本文转自 斯然在天边 51CTO博客,原文链接:http://blog.51cto.com/winters1224/812289,如需转载请自行联系原作者

相关文章
|
存储 容器
HashMap什么时候扩容,如何扩容?怎么轻松化解?
一位2年工作经验的小伙伴面试时被问到,说,HashMap什么时候扩容,为什么要扩容?这个问题本身不是很难,但是这位小伙伴对底层实现原理没有太多关注,所以,被这个问题难住了。 下面我给大家分析一下这个问题的底层逻辑。
294 2
|
自然语言处理 机器人
ROS2教程 08 动作Action
本文是关于ROS2(机器人操作系统2)中动作(Action)机制的教程,详细介绍了动作的概念、ros2 action相关命令的使用,包括列出、发送目标、获取动作信息,并通过示例代码展示了如何创建动作服务端(Action Server)和客户端(Action Client),以及如何实现动作的执行、反馈和结果处理。
723 0
ROS2教程 08 动作Action
|
7月前
|
机器学习/深度学习
RT-DETR改进策略【Neck】| GSConv+Slim Neck:混合深度可分离卷积和标准卷积的轻量化网络设计
RT-DETR改进策略【Neck】| GSConv+Slim Neck:混合深度可分离卷积和标准卷积的轻量化网络设计
278 11
|
JavaScript
Vue3弹性布局(Flex)
这是一个基于 Vue 的弹性布局组件库,提供了丰富的参数配置,如宽度、方向、换行等,支持自定义对齐方式和间隙设置。在线预览展示了不同布局效果,包括单选、按钮和滑动输入条等组件的使用示例。
479 0
Vue3弹性布局(Flex)
封装httpclient工具类
httpclient远程调用工具封装使用
|
关系型数据库 应用服务中间件 nginx
部署开源项目管理工具focalboard
部署开源项目管理工具focalboard
360 0
|
Java Apache
远程调用工具HttpClient工具类封装
java远程调用工具HttpClient工具类类封装
|
设计模式 搜索推荐 算法
JDK中的排序:Arrays.sort的源码实现
JDK中的排序:Arrays.sort的源码实现
780 0
JDK中的排序:Arrays.sort的源码实现
|
并行计算 数据挖掘 数据处理
Pandas性能优化与高级功能:让数据处理更高效
【4月更文挑战第16天】本文探讨了如何优化Pandas的性能和利用其高级功能。关键的性能优化方法包括选择合适的数据类型、避免数据复制、使用向量化操作、优化查询和索引,以及探索并行计算。高级功能涉及分组聚合、窗口函数、数据透视表、缺失值处理和分类数据编码。通过这些技巧,可以更高效地处理大规模数据集。
|
NoSQL Java Redis
分布式延时消息的另外一种选择 Redisson (推荐使用)
来源: https://blog.csdn.net/m0_73311735/article/details/127070042 因为工作中需要用到分布式的延时队列,调研了一段时间,选择使用 Redisson DelayedQueue,为了搞清楚内部运行流程,特记录下来。 总体流程大概是图中的这个样子,初看一眼有点不知从何下手,接下来我会通过以下几点来分析流程,相信看完本文你能了解整个运行流程。 基本使用 内部数据结构介绍 基本流程 发送延时消息 获取延时消息 初始化延时队列 图片 基本使用 发送延迟消息代码如下,发送了一条延迟时间为 5s 的消息。 public void prod