HTTP的超时参数

本文详细介绍了HTTP连接的三种超时参数:connectionRequestTimeout、connectionTimeout和socketTimeout,并分析了TCP连接中客户端断开连接后服务端无法直接感知的问题。讨论了brokenpipe异常的产生原因,并提出通过定时心跳检查来判断连接状态的方法。
摘要由CSDN通过智能技术生成

HTTP连接一般存在如下三种超时参数:

connectionRequestTimout:从连接池获取连接的timeout

connetionTimeout:客户端和服务器建立连接的timeout。 http请求的三个阶段,一:建立连接;二:数据传送;三,断开连接。超时后会ConnectionTimeOutException

socketTimeout:指客户端从服务器读取数据的timeout,超出后会抛出SocketTimeOutException

说点题外话,当时有 QA 同事认为客户端可以维护或者设置 HTTP 参数让服务端感知到连接断开,进而来取消此此的请求处理。此处贴一下当时给他的分析,如下:

由于HTTP是基于TCP的,在TCP中,客户端中断了连接,服务端是无法感知的。而java.io.IOException: Broken pipe异常,这个异常是tomcat的connector在执行写操作的时候发生的,客户端读取超时关闭了连接,这时候服务器端再向客户端已经断开的连接写数据时就发生了broken pipe异常。

也就是说客户端和服务端的HTTP交互,不存在配置可以做到客户端断开连接后,服务端可以实时感知到连接断开,除非客户端和服务端约定定时心跳检查,服务端对连接是否可用进行定时检查,从而判断当前查询是否继续进行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值