场景: 使用nodejs请求外部网页,要求规定时间内返回
依赖库: http/https
方案:
由于nodejs自身没有对http连接的可配置的超时控制机制,需要自行增加
/**
* if timeout, emit "timeout" event, abort request, and emit "abort" event for response
* @param options
* @param timeout
* @param callback
*/
function httpGetWithTimeoutSupport(options, timeout, callback) {
var timeoutEvent;
var req = http.get(options, function(res) {
res.on("end", function() {
clearTimeout(timeoutEvent);
console.log("end");
})
res.on("close", function(e) {
clearTimeout(timeoutEvent);
console.log("close");
})
res.on("abort", function() {
console.log("abort");
});
callback(res);
});
req.on("timeout", function() {
console.log("timeout received");
if (req.res) {
req.res.emit("abort");
}
req.abort();
});
timeoutEvent = setTimeout(function() {
req.emit("timeout");
}, timeout);
return req;
}
var data = "";
res.on("data", function(d) {
data += d;
});
res.on("end", function() {
console.log(data);
})
});
nodejs自带一个默认的2分钟的强制超时, 见http.js;这个超时会导致close事件发生,错误代码为"timeout". 同时超时是针对连接而非单个的请求的(一个连接上有许多请求).
分享到:
相关推荐
nodejs 18.17.1
用于解决jenkins安装nodeJs插件后不能选择nodejs版本,将该文件上传到服务器,然后 docker cp ./hudson.plugins.nodejs.tools.NodeJSInstaller 容器ID:/var/jenkins_home/updates 然后重启Jenkins
如何打造高可用nodejs框架.pdf
通过 NodeJS中的http.get 和 http.request模块两种方法,调用中国天气api
通过NodeJS中的http.get 和 http.request模块两种方法,调用中国天气api
Node.js 就是运行在服务端的 JavaScript,是一个基于Chrome JavaScript 运行时建立的一个平台。 Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常...
debain安装nodejs和npm,nodejs12.18.2-npm6.14.5版本,二进制编译好的,直接可以使用
nodejs学习.md
bin-node安装包node-v14.18.0-x64-win10版
nodejs14.9.0
NodeJS基础.docxNodeJS基础.docxNodeJS基础.docxNodeJS基础.docxNodeJS基础.docxNodeJS基础.docxNodeJS基础.docxNodeJS基础.docx
nodejs12.11.1windows64位版本
NodeJs - Request实现短信验证码注册登录完整示例:NodeJs - Request.js和附件说明
nodejs cytoid.js
nodejs数据.rar
https://nodejs.org/en/download/ 公司内网打不开这个地址,上传资源 LTS版本
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
nodejs服务器.rar
作业 nodejs oneday.rar