Отключить время ожидания запроса в Koa

Я получаю сообщение об ошибке сброса соединения. Я вполне уверен, что это происходит из-за длительного запроса REST, то есть тайм-аут.

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

Есть ли способ отключить тайм-ауты запросов в Koa, чтобы я мог проверить эту гипотезу?

У меня версия node 5.x, koa 0.10, centOs 6.


person akaphenom    schedule 19.10.2016    source источник
comment
Что вы подразумеваете под отключением тайм-аутов? Предотвратить выполнение запроса или предотвратить выдачу ошибки? Этот пост может помочь, если вы еще не читали его. stackoverflow.com/questions/10814481/   -  person Larry Turtis    schedule 19.10.2016
comment
Спасибо, Ларри - мне интересно, есть ли более конкретный ответ. Он обертывает материал HTTP и дает вам ограниченный контроль...   -  person akaphenom    schedule 19.10.2016
comment
Вы пытались запустить приложение с помощью DEBUG=* и использовать app.onerror? Вы пытаетесь найти плохой запрос, верно?   -  person Larry Turtis    schedule 19.10.2016
comment
Насколько мне известно, Koa не устанавливает никаких тайм-аутов, сокет hang up error выбрасывается из базового сокета nodejs. Возможно, req.socket.setTimeout() может помочь вам увеличить время ожидания.   -  person zeronone    schedule 30.10.2016


Ответы (2)


если хотите установить тайм-аут для сервера приложений:

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); 
})
person neo    schedule 01.02.2019

Кажется, ваш запрос занимает больше времени, чем тайм-аут Koa по умолчанию. Koa по умолчанию время ожидания составляет 2 минуты

У меня была аналогичная проблема, один запрос занимал больше времени, чем 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 минуты, в идеале запускайте тяжелые вещи в отдельном процессе, а по другому запросу просто проверяйте, выполнена ли работа.

Так что это может быть хорошо только для целей тестирования

person m1uan    schedule 27.11.2017