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...
})