【问题标题】:Nodejs and express server closes connection after 2 minutesNodejs 和 express 服务器在 2 分钟后关闭连接
【发布时间】:2015-12-29 04:59:54
【问题描述】:

我正在使用 Express 4.X 和 node 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 分钟后不断关闭连接。尝试将节点版本更改为旧版本,但没有成功。 尝试了网上找到的所有变体,但连接仍然关闭...

【问题讨论】:

  • 也试过了,连接中间件会导致同样的 2 分钟超时...
  • 阅读该页面的最后一个答案。
  • 抱歉,不太清楚你想让我在那里读什么。正如我已经说过的,我已经尝试了他们所有的建议,但没有一个有效。
  • 如果您使用的是 Express 4.X,其中超时中间件已被删除,因此需要手动添加它。你这样做了?

标签: javascript node.js express


【解决方案1】:

server.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()

另外,也可能是浏览器问题。阅读this

【讨论】:

  • 试过120000ms后仍然关闭连接
【解决方案2】:

怎么样:

server.on('connection', function(socket) {
  socket.setTimeout(5 * 60 * 1000);
  socket.once('timeout', function() {
    process.nextTick(socket.destroy);
  });
});

【讨论】:

  • 如前所述,超时中间件未按预期工作,连接在 2 分钟后关闭。
  • 我看到了,所以我正在更新我的答案,现在检查(:
  • 不,还是一样 :( 这让我发疯了,最疯狂的部分是在一个月前 socket.setTimeout() 确实修复了这个问题,突然 2 天前它无缘无故地返回全部。
  • 问题一直是浏览器同步...它为请求打开了并行套接字,我猜无论服务器配置如何,内部超时都为 2 分钟。关闭初始 socket.setTimeout(600 * 60 * 1000); 后完美运行。
  • 感谢上帝,花了大约 4 个小时:(
【解决方案3】:

在尝试了每个可用的答案几个小时后,我与 fiddler 对该请求进行了检查。事实证明,在我的开发环境中,我使用 browser-sync 在任何更改时自动刷新浏览器窗口。在提琴手中,我注意到上传 POST 请求的浏览器同步将其绑定到一个有 2 分钟超时的套接字连接。

关闭浏览器同步代理后,第一个解决方案就像一个魅力。

server.on('connection', function(socket) {
  socket.setTimeout(600 * 60 * 1000); // now works perfectly...
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-12
    • 1970-01-01
    • 2013-08-28
    • 2023-03-19
    • 1970-01-01
    • 2020-09-18
    • 2016-09-12
    相关资源
    最近更新 更多