本人在作接口功能自动化测试的过程当中遇到一个一个问题,若是请求过于频繁后,总会报一个java.net.SocketException: socket closed异常,在研究完代码以后发现了一个问题,在请求结束以后我作一个释放释放连接的方法。 很早以前写的这个了,没想到访问量还挺高,为了避免误人子弟特地来补充:本人用的httpclient包是4.5.5,releaseConection()方法已经弃用了。用如今的PoolingHttpClientConnectionManager来管理链接池,不须要这个方法。java
异常想信息以下: java.net.SocketException: socket closed
下面是个人错误代码:编程
request.releaseConnection();//此处容易形成socket close
我想了一下,查阅了一些资料,这个releaseconnection()的方法,是释放该连接以后并不关闭,这样这个连接就能够重复使用了。官方的文档中表达以下:json
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才能执行下一个连接。框架
我代码出现这个问题的缘由是在连接释放后,服务端主动关闭了这个连接。我又查了一些资料,印证了本身的猜测,由于这个方法实在链接池使用的过程当中释放连接的办法,链接池管理器就会关闭这个连接重复让别的请求使用。至此,问题找到了。socket