如何使用Restify增加服务器端的套接字超时?

时间:2013-03-08 23:27:35

标签: web-services node.js restify connection-reset econnreset

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

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

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

我是否可以在解决此问题的createServer方法中设置任何选项?

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

提前致谢!

2 个答案:

答案 0 :(得分:6)

您可以在req对象上使用标准socket,并手动调用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();
});

答案 1 :(得分:0)

这种接缝实际上并未实施

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