Nodejs и express server закрывают соединение через 2 минуты
Im с помощью Express 4.X и узел js 0.12.
один из моих маршрутов предназначен для загрузки и обработки файлов, а для некоторых файлов загрузка и процесс занимает более 2 минут таймаута по умолчанию. Я попытался установить значения более 2 минут, но он просто не работает, сервер закрывает соединение точно через 2 минуты каждый раз.
server.timeout = 60 * 60 * 1000; // still closes after 2 minutes
server.on('connection', function(socket) {
socket.setTimeout(700 * 1000); // still closes after 2 minutes
});
res.setTimeout(0);// still closes after 2 minutes
req.setTimeout(0);// still closes after 2 minutes
res.connection.setTimeout(0);// still closes after 2 minutes
промежуточное программное обеспечение connect-timeout также не помогает, оно просто продолжает закрывать соединение после ровно 2 протокол. Попытался изменить версию узла на более старую версию, но без успеха. Попробовал все варианты, найденные в интернете, но соединение все равно закрывается...
3 ответов
сервер.setTimeout () - это метод, который устанавливает тайм-аут HTTP-соединения для всех соединений.
2 минуты по умолчанию.
ОБНОВЛЕННЫЙ ОТВЕТ
попробуйте это:
var express = require('express');
var http = require('http');
var app = module.exports.app = express();
var server = http.createServer(app);
server.setTimeout(10*60*1000); // 10 * 60 seconds * 1000 msecs
server.listen(appConfig.port, function () {
var logger = app.get('logger');
logger.info('**** STARTING SERVER ****');
});
или такой:
http.request(url).setTimeout()
кроме того, это может быть проблема браузера. Читать этой.
Как насчет:
server.on('connection', function(socket) {
socket.setTimeout(5 * 60 * 1000);
socket.once('timeout', function() {
process.nextTick(socket.destroy);
});
});
после нескольких часов попытки каждого ответа я провел проверку с fiddler для этого запроса. Получается, что в моей среде разработки я использую браузер-синхронизация для автоматического обновления окна браузера при любом изменении. В fiddler я заметил, что длинный с загрузкой POST request browser-sync привязал его к соединению сокета, у которого был 2-минутный тайм-аут.
после выключения прокси-сервера синхронизации браузера самое первое решение работало как обаяние.
server.on('connection', function(socket) {
socket.setTimeout(600 * 60 * 1000); // now works perfectly...
})