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交互,不存在配置可以做到客户端断开连接后,服务端可以实时感知到连接断开,除非客户端和服务端约定定时心跳检查,服务端对连接是否可用进行定时检查,从而判断当前查询是否继续进行。