首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Node中设置http.request()超时?

如何在Node中设置http.request()超时?
EN

Stack Overflow用户
提问于 2011-06-02 21:07:03
回答 9查看 168.2K关注 0票数 104

我尝试在一个使用http.request的超时客户端上设置一个超时。到目前为止,我所做的是:

代码语言:javascript
复制
var options = { ... }
var req = http.request(options, function(res) {
  // Usual stuff: on(data), on(end), chunks, etc...
}

/* This does not work TOO MUCH... sometimes the socket is not ready (undefined) expecially on rapid sequences of requests */
req.socket.setTimeout(myTimeout);  
req.socket.on('timeout', function() {
  req.abort();
});

req.write('something');
req.end();

有什么提示吗?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2019-03-06 18:47:02

只是为了澄清一下answer above

现在可以使用timeout选项和相应的请求事件:

代码语言:javascript
复制
// set the desired timeout in options
const options = {
    //...
    timeout: 3000,
};

// create a request
const request = http.request(options, response => {
    // your callback here
});

// use its "timeout" event to abort the request
request.on('timeout', () => {
    request.abort();
});
票数 42
EN

Stack Overflow用户

发布于 2012-03-28 23:07:14

2019更新

现在有各种方法可以更优雅地处理这个问题。请在这个帖子上看到一些其他的答案。技术发展很快,所以答案往往很快就会过时。我的答案仍然有效,但也值得考虑其他选择。

2012年答案

使用您的代码,问题是在尝试设置套接字对象之前,您没有等待将套接字分配给请求。这一切都是异步的,所以:

代码语言:javascript
复制
var options = { ... }
var req = http.request(options, function(res) {
  // Usual stuff: on(data), on(end), chunks, etc...
});

req.on('socket', function (socket) {
    socket.setTimeout(myTimeout);  
    socket.on('timeout', function() {
        req.abort();
    });
});

req.on('error', function(err) {
    if (err.code === "ECONNRESET") {
        console.log("Timeout occurs");
        //specific error treatment
    }
    //other error treatment
});

req.write('something');
req.end();

当为请求分配套接字对象时,将触发“socket”事件。

票数 93
EN

Stack Overflow用户

发布于 2012-06-27 15:29:04

此时,有一个方法可以直接在请求对象上执行此操作:

代码语言:javascript
复制
request.setTimeout(timeout, function() {
    request.abort();
});

这是一个快捷方法,它绑定到套接字事件,然后创建超时。

参考:Node.js v0.8.8 Manual & Documentation

票数 41
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6214902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档