前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >httpclient遇到socket closed解决办法

httpclient遇到socket closed解决办法

作者头像
FunTester
发布2019-08-27 14:30:46
8.5K0
发布2019-08-27 14:30:46
举报
文章被收录于专栏:FunTester

本人在做接口功能自动化测试的过程中遇到一个一个问题,如果请求过于频繁后,总会报一个java.net.SocketException: socket closed异常,在研究完代码之后发现了一个问题,在请求结束之后我做一个释放释放链接的方法。

很早之前写的这个了,没想到访问量还挺高,为了不误人子弟特意来补充:本人用的httpclient包是4.5.5,releaseConection()方法已经弃用了。用现在的PoolingHttpClientConnectionManager来管理连接池,不需要这个方法。

异常想信息如下: java.net.SocketException: socket closed 下面是我的错误代码:

request.releaseConnection();//此处容易造成socket close 我想了一下,查阅了一些资料,这个releaseconnection()的方法,是释放该链接之后并不关闭,这样这个链接就可以重复使用了。官方的文档中表达如下:

This is a crucial step to keep things flowing. We must tell HttpClient that we are done with the connection and that it can now be reused. Without doing this HttpClient will wait indefinitely for a connection to free up so that it can be reused.

翻译过来的意思大概是,这个是资源流动利用的关键。必须告诉httpclient,这个链接释放掉可以被重复使用。使用这个方法的好处就是,不需要等待有一个空闲的httpclient才能执行下一个链接。

我代码出现这个问题的原因是在链接释放后,服务端主动关闭了这个链接。我又查了一些资料,印证了自己的猜想,因为这个方法实在连接池使用的过程中释放链接的办法,连接池管理器就会关闭这个链接重复让别的请求使用。至此,问题找到了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FunTester 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档