node http 请求时间超时

日期: 2018-10-10         浏览量: 3065

默认没有。

那么,req.setTimeout(msec, callback)是干什么用的。


它的意思是 socket msec 没有活动后执行callback,不帮你关闭连接。


就像一个秒表,每收到数据就从头开始计时,打比方:“好久没有收到你的信了”

 

提示:客户端是没有自带的超时的(需要自己实现),服务端有,下面总结一下node中http模块的超时。


http的四种超时(它们都是服务端的)


1. 默认2分钟

2. server.timeout = 120000;
3. res.on(‘timeout‘, callback)
4. req.setTimeout(msecs, callback)

它们的区别如下

在采用http默认的timeout(2分钟)的情况下,如果这次请求hang
up,也就是没有res.end(),那么服务器会触发req.aborted req.close res.close事件,关闭连接。

但是,如果注册了res.on(‘timeout‘, callback) 的时候,2分钟后,http执行timeout的回调函数,其它什么都不做。

如果注册了req.setTimeout(msecs, callback),则msecs超时后http执行回调函数,其它的什么都不做。

如果同时注册了res.on(‘timeout‘, callback)和req.setTimeout(msecs, callback),则分别执行这两个回调函数,其他什么都不做。

如果只是设定了server.timeout变量,则超时行为和默认一样,还是会触发res.aborted req.close res.close,关闭连接 -- 只是超时的时间缩短了。