在 Koa 中禁用请求超时

aka*_*nom 5 javascript centos node.js koa

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

 { [Error: socket hang up] code: 'ECONNRESET' }
Run Code Online (Sandbox Code Playgroud)

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

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

m1u*_*uan 5

您的请求似乎比默认的 Koa 超时时间更长。默认 Koa超时为 2 分钟

我遇到了类似的问题,一个请求花费的时间超过 2 分钟。我受到zeronone这篇文章中的赞扬的启发,最后这句话对我有帮助

ctx.request.socket.setTimeout(5 * 60 * 1000); 
Run Code Online (Sandbox Code Playgroud)

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

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
});
Run Code Online (Sandbox Code Playgroud)

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

所以这可能只是为了测试目的


小智 5

如果要为应用程序服务器设置超时:

let app = new Koa();
let server=app.listen(3000);
server.timeout=5*60*1000;
Run Code Online (Sandbox Code Playgroud)

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

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