在http请求

时间:2016-11-10 11:50:33

标签: node.js sockets http timeout

如果持续时间超过10秒,下面的代码将中止请求。

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

另外,我应该使用套接字并请求超时吗?

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();
});

1 个答案:

答案 0 :(得分:1)

对于连接超时,Node使用操作系统默认值。简化后,如果您无法在一段时间内到达服务器,则会触发这些操作。

建立连接后,request#setTimeout() function会设置空闲超时,这会在一段时间内没有网络活动时触发。听起来这就是你想要的。 (注意,在创建套接字时,它下面只调用socket#setTimeout,因此不需要同时调用它们。)

对于其他类型的逻辑,您需要手动使用timers来设置自己的东西。但是你提供的代码应该可以正常工作 - 如果连接到服务器后停止发送数据的时间超过10,000毫秒,则会触发超时。