nodejs - http.request是否有超时

默认没有。

那么,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,关闭连接 -- 只是超时的时间缩短了。

注:node版本v0.12.0

时间: 2024-10-11 06:54:14

nodejs - http.request是否有超时的相关文章

Nodejs中request出现ESOCKETTIMEDOUT解决方案

做需求的时候,使用Nodejs的request批量请求某一个接口,由于接口超时,出现 ESOCKETTIMEDOUT,程序中断 为了让程序遇到 ESOCKETTIMEDOUT 之后能够继续执行下去,需要对 request 部分加上 try...catch,再catch中记录这条失败请求的信息,后面不断重试 try{ //这里是你request请求的代码 }catch(e){ //这里需要用一些措施记录下失败的数据 //1.将错误请求输出到某一个日志文件中 //2.将错误请求保存到某个数组中,下面

koa-bodyParse 接受post 大表单报错:nodejs Error request entity too large

Node.js从2009横空出世之后,至今已经7年有余,各种web框架也林林总总,目前大约在npm上有35万左右包,刨去前端和一些无意义的封装,也是有非常可观的优秀的模块的.其中web框架也是特别抢眼的,从早期的express到现在koa,对异步流程控制的改进前仆后继.随着移动端崛起面向api的框架hapi和restify也如火如荼,更有一些面向特性的框架,比如thinkjs对es6/es7/typescript支持,整体来说,质量都是非常不错的,算百花齐放,还是那句话,即使不优化,你也能用这些

利用Nodejs & Cheerio & Request抓取Lofter美女图片

还是参考了这篇文章: http://cnodejs.org/topic/54bdaac4514ea9146862abee 另外有上面文章 nodejs抓取网易公开课的一些经验. 代码如下,注意其中用到了 http获取网页结果,request进行http请求,cheerio进行解析,mkdirp创建目录,fs创建文件,iconv-lite进行格式转换(此例非必须). curl.js: /** * Created by baidu on 16/10/17. */ var http = require

nodejs使用request和bluebird编写的http请求模块

var request = require("request"); var promise = require("bluebird"); //使用bluebird将request库的所有异步方法编译成promise形式,会自动加上Async后缀 request = promise.promisifyAll(request); var curl = (function () { function curl() { } /** * 输入一个url和需要post的数据(如

NodeJS: 处理request网页乱码问题

对于gb2312编码的网页,直接用request去获取会得到乱码的结果,解决方法很简单: 1. npm install iconv-lite 2. var iconv = require('iconv-lite'); 3. request.get({ url : url , encoding : null //让body 直接是buffer }, response); 4. var response = function (err, response, body) { //返回的body 直接就

NodeJS POST Request Over JSON-RPC

1.npm install art-template2.npm  install request3.在app.js中加入以下代码转html: var template = require('art-template');template.config('base', '');template.config('extname', '.html');app.engine('.html', template.__express);app.set('view engine', 'html'); 4.在r

nodejs Error: request entity too large解决方案

错误如图: 解决方案: app.js添加 var bodyParser = require('body-parser'); app.use(bodyParser.json({limit: '50mb'})); app.use(bodyParser.urlencoded({limit: '50mb', extended: true}));

Nodejs写的搬家工具知识分享

这篇文章 主要学习这两个模块的使用: request-promise-native : https://github.com/request/request-promise-native cheerio :https://github.com/cheeriojs/cheerio nodejs有个request模块,专门处理这些网络请求方面的. 就像.NET也有request,webclient,httpclient啥的... nodejs的request使用方法在这,自己查一下: https:/

nodejs实现一个简单的爬虫

nodejs是js语言,实现一个爬出非常的方便. 步骤 1. 使用nodejs的request模块,获取目标页面的html代码:https://github.com/request/request 2. 使用cheerio模块对html代码做处理(cheerio类似jQuery的语法,所以好用又方便)https://github.com/cheeriojs/cheerio 下面我们借助exprerss来做一个简单的nodejs爬虫系统.http://www.expressjs.com.cn/ 具