2016-11-10 143 views
0

如果请求的持续时间超过10秒,下面的代码将中止请求。在http请求中设置基于套接字的超时

是否可以使用http模块在请求上设置基于socket的超时?

此外,我应该使用套接字和请求超时?

var abortRequestError; 
var timeout = 10000; 
var requestObject = { 
    host: 'xx.xx.xx.xx', 
    path: '/api', 
    port: 10000, 
    method: 'GET' 
}; 

var req = http.request(requestObject, function(res) { 

    var responseBody = ''; 
    res.on('data', function(data) { 
    responseBody += data; 
    }); 

    res.on('end', function() { 
    console.log(abortRequestError); 
    }); 

}).on('error', function(error) { 

    error = abortRequestError ? abortRequestError : error; 
    console.log(error); 

}).setTimeout(timeout, function() { 

    abortRequestError = new Error('Request timed out'); 
    req.abort(); 
}); 
+0

你的意思是连接超时? – elmigranto

+0

只有当数据流中断10秒时才会被认为中断。是否连接超时? – bobbyrne01

+0

您的代码为您想要实现的功能调用正确的函数 - 套接字空闲时超时;也许问题在别处。你想达到什么目标,究竟哪些方法无效? – elmigranto

回答

1

对于连接超时,节点使用OS的默认值。简单来说,当您在一段时间内无法到达服务器时会触发这些事件。

建立连接后,request#setTimeout() function设置为空闲超时,当一段时间内没有网络活动时触发。听起来像这是你想要的。 (请注意,它的下面简单地调用socket#setTimeout创建套接字时,所以没有必要调用两个。)

对于其他类型的逻辑,你需要建立自己的东西与timers说明书使用。但是您提供的代码应该能够正常工作 - 如果在连接到服务器后,服务器停止发送数据的时间超过10,000毫秒,则会触发超时。