HttpCLient 发送POST/GET请求 发生socket close

一开始的代码:


这段代码在前端发送请求执行时,前端一致在打转转,但是Response为null,一开始不知道什么原因,后来查看后台日志,日志的内容如下:


查看源码发现:

源码中的第一个try catch finally代码块有问题。不管 try是否跑出异常,finally一定会执行的,执行了这个releaseconnection(),这个方法链接释放,释放链接后服务端主动关闭了这个链接。所以,执行到"获取响应体Json字符串处"时,想去获取响应体时,服务器已关闭了连接,导致socket close。

解决方法:

将两个try catch finally块的代码合并在一个try catch finally中。

releaseconnection()方法,是释放该链接之后并不关闭,连接池管理器就会关闭这个链接重复让别的请求使用。这样这个链接就可以重复使用了。官方的文档中表达如下:

[plain]  view plain  copy
  1. 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才能执行下一个链接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值