Koa-无法增加默认请求超时

时间:2018-07-30 11:09:44

标签: node.js koa

我需要增加Koa服务器中2分钟默认请求超时的帮助。 我的任务很长时间,需要几分钟。完成后,我将发送回一个响应。问题是2分钟的超时(默认为节点js)后,连接会自动关闭。

我尝试了Google的所有功能。 尝试使用所有类型的第三方npm模块。

尝试ctx.request.socket.setTimeout(0)

我没有主意,需要帮助。

我正在使用无限超时的邮递员执行对服务器的请求。

更新-这是一段代码,其中包含我正在尝试做的事情:

const Koa = require('koa')
const app = new Koa()
const PORT = 7555
const server = app.listen(PORT)

app.use(async (ctx, next) => {
    ctx.req.setTimeout(0);
    await next();
});


app.use(async (ctx, next) => {
    const wait = async () => {
        return new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve()
            }, 1000 * 60 * 5)

        })
    }
    await wait()
    console.log("settimeout finished", new Date())
    ctx.response.body = { success: "true", date: new Date() }
})

2 个答案:

答案 0 :(得分:1)

您可以像这样在应用程序的早期添加中间件:

app.use(async (ctx, next) => {
    ctx.req.setTimeout(0);
    await next();
});

似乎koa保留了120s timeout default from http_server.js

因此,您可以尝试破解它,但是这种中间件应该可以解决问题。

您也可以尝试以下方法:

const server = app.listen(PORT); // This returns the https_server instance

server.setTimeout(600000)

您可以查看相关信息here

答案 1 :(得分:1)

我测试了这一个……效果很好:

public static Collection<List<Integer>> splitListBySize(List<Integer> intList, int size) {

    if (!intList.isEmpty() && size > 0) {
        final AtomicInteger counter = new AtomicInteger(0);
        return intList.stream().collect(Collectors.groupingBy(it -> counter.getAndIncrement() / size)).values();
    }
    return null;
}

请确保-如果您的生产系统中涉及const Koa = require('koa') const app = new Koa() const PORT = 7555 const server = app.listen(PORT); server.setTimeout(0); // <-- this should do the trick ... app.use(async (ctx, next) => { console.log("request started", new Date()) const wait = async () => { return new Promise((resolve, reject) => { setTimeout(() => { resolve() }, 1000 * 60 * 5) }) } await wait() console.log("settimeout finished", new Date()) ctx.response.body = { success: "true", date: new Date() } }) apache来修改其配置(此处将其增加到500秒)。

对于NGINX(代理)

nginx

vim /etc/nginx/nginx.conf 部分

中添加以下内容

(请参阅http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_read_timeout

http{..}

对于Apache

http {
    #...
        proxy_read_timeout 500s;
        proxy_send_timeout 500s;
    #...
}

搜索超时

vim /etc/apache2/apache2.conf: