httpclient 设置短连接_记一次http长连接与短连接问题

在看这篇文章前,先来看看作者所遇到的问题。理解问题形成的原因,从而深入理解http长连接与短连接的区别。

问题:

项目默认使用zuul进行请求转发(部分功能使用SimpleHostRoutingFilter进行http请求方式转发)。上线一段时间后,发现部分请求有部分失败情况。详情如下:

请求链路错误信息:noHttpResponeException,网上有很多解决方案及问题产生原因。现在想来他们的说法都很正确。

如:

1、服务端资源不足,导致客户端请求立即失败,解决方案重试几次。

2、客户端keep-alive时间大于服务端keep-alive时间

原因分析:

zuul请求转发使用SimpleHostRoutingFilter 其实还是使用原始httpClient方式进去请求,查询相关资料  HTTP1.1规定了默认保持长连接(HTTP persistent connection),数据传输完成了保持TCP连接不断开(不发RST包、不四次握手),等待在同域名下继续用这个通道传输数据;相反的就是短连接。关于三次握手和四次挥手这里不在叙述。

本案例中服务端使用的是短连接模式,而客户端使用长连接模式(默认方式),所以当服务端结束是,客户端任然使用该连接发送请求,从而出现noHttpResponeException异常。

解决方案:

一下几种解决方案都可以解决作者出现的问题。

1、重试方案:识别noHttpResponeException异常,进行重试操作

2、设置keep-alive方案

3、设置KeepAlive策略为不重用方案(作者采用的方案) ,即使用短连接模式(这里已经需要经过权衡取舍,原因是长连接与短连接各有优缺点)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值