Как увеличить время ожидания сокета на стороне сервера с помощью Restify?

Я использую restify для реализации сервера node.js. В основном сервер выполняет трудоемкий процесс для каждого запроса HTTP POST, но каким-то образом сокет закрывается, и клиент получает сообщение об ошибке, подобное этому:

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

В зависимости от типа ошибки сокет определенно закрыт на стороне сервера.

Есть ли опция, которую я могу установить в createServer Метод Restify для решения этой проблемы?

Редактировать: длительный процесс использует Mongoose для запуска процесса MongoDB. Возможно также возможно, что зависание сокета вызвано соединением с MongoDB? Как увеличить время ожидания для мангуста? Я обнаружил, что зависание произошло ровно через 120 секунд, так что это может быть из-за некоторой конфигурации тайм-аута по умолчанию?

Заранее спасибо!

2 ответа

Решение

Вы можете использовать стандартную розетку на req объекта, и вручную вызовите setTimeout, чтобы увеличить время, прежде чем узел повесит сокет. По умолчанию узел имеет 2-минутный таймер на всех сокетах для бездействия, поэтому вы получаете зависания ровно через 120 секунд (это не имеет никакого отношения к restify). В качестве примера увеличения этого, настройте обработчик для запуска перед вашей долгосрочной задачей, например:

server.use(function (req, res, next) {
    // This will set the idle timer to 10 minutes
    req.connection.setTimeout(600 * 1000);
    res.connection.setTimeout(600 * 1000); //**Edited**
    next();
});

Это швы не должны быть реализованы

https://github.com/mcavage/node-restify/issues/288

Другие вопросы по тегам