【问题标题】:Setting socket based timeout on http request在 http 请求上设置基于套接字的超时
【发布时间】:2017-03-24 10:35:56
【问题描述】:

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

是否可以使用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();
});

【问题讨论】:

  • 你的意思是连接超时吗?
  • 只有数据流中断10秒才能认为是坏了..是连接超时吗?
  • 您的代码为您想要实现的目标调用了正确的函数——套接字空闲时超时;也许问题出在其他地方。你想达到什么目标,什么是行不通的?

标签: node.js sockets http timeout


【解决方案1】:

对于连接超时,Node 使用操作系统默认值。简而言之,当您在一段时间内根本无法访问服务器时会触发这些。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-16
    • 2023-03-20
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多