2

我使用restify 来实现一个node.js 服务器。基本上,服务器根据 HTTP POST 请求运行一个耗时的过程,但不知何故,套接字被关闭,客户端收到如下错误消息:

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

根据错误类型,套接字肯定在服务器端关闭。

我可以在createServerrestify 的方法中设置任何选项来解决这个问题吗?

编辑: 长时间运行的进程是使用 Mongoose 运行 MongoDB 进程。也许套接字挂断也可能是由与 MongoDB 的连接引起的?如何增加猫鼬的超时时间?我发现挂断恰好在 120 秒内发生,所以可能是因为某些默认超时配置?

提前致谢!

4

2 回答 2

9

您可以在对象上使用标准套接字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();
});
于 2013-03-09T22:07:59.990 回答
0

此接缝实际上并未实施

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

于 2013-03-09T06:12:13.870 回答