【问题标题】:Disable Request TImeout in Koa在 Koa 中禁用请求超时
【发布时间】:2019-02-01 19:09:57
【问题描述】:

我收到连接重置错误。我相当肯定这是来自一个长时间运行的 REST 请求,即超时。

 { [Error: socket hang up] code: 'ECONNRESET' }

有没有办法在 Koa 中禁用请求超时,以便我可以检验这个假设?

我正在运行节点版本 5.x、koa 0.10、centOs 6

【问题讨论】:

  • 禁用超时是什么意思?阻止发出请求,或阻止它抛出错误?如果您还没有阅读这篇文章,这篇文章可能会有所帮助。 stackoverflow.com/questions/10814481/…
  • 谢谢拉里 - 我想知道是否有更具体的 koa 答案。它包装了 HTTP 的东西并给你有限的控制权......
  • 您是否尝试过使用DEBUG=* 运行应用程序并使用app.onerror?您正在尝试找出错误的请求,对吗?
  • AFAIK Koa 不会施加任何超时,套接字 hang up error 是从底层 nodejs 套接字抛出的。也许req.socket.setTimeout() 可能会帮助您增加超时时间。

标签: javascript node.js centos koa


【解决方案1】:

如果想为应用服务器设置超时:

let app = new Koa();
let server=app.listen(3000);
server.timeout=5*60*1000;

如果针对每个请求,正如@m1uan 所说:

router.get("/path",async (ctx)=>{
      ctx.request.socket.setTimeout(5 * 60 * 1000); 
})

【讨论】:

    【解决方案2】:

    您的请求似乎比默认的 Koa 超时时间更长。默认 Koa timeout is 2 minutes

    我有类似的问题,一个请求需要超过 2 分钟的时间。 我被这篇文章中的zeronone 表扬鼓舞了,最后这句话对我有所帮助

    ctx.request.socket.setTimeout(5 * 60 * 1000); 
    

    所以路由器中的整个代码看起来像

    router.post('/long-request', async (ctx) => {
        // set timeout to 5 minutes
        ctx.request.socket.setTimeout(5 * 60 * 1000); 
    
        // do some stuf what take long time
        // but less than 5 minutes
    });
    

    我真的不建议做超过 1 分钟的请求,理想情况下在单独的进程上运行繁重的东西,并通过其他请求检查工作是否完成。

    所以这可能只是用于测试目的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-19
      • 2020-02-02
      • 2011-02-26
      • 2017-02-01
      • 1970-01-01
      • 2015-10-08
      • 1970-01-01
      • 2014-04-04
      相关资源
      最近更新 更多