我使用restify来实现node.js服务器。基本上,服务器根据HTTP POST请求运行一个耗时的过程,但不知何故套接字关闭,客户端收到如下错误消息:
[Error: socket hang up] code: 'ECONNRESET'
根据错误类型,套接字在服务器端肯定是关闭的。
我是否可以在解决此问题的createServer
方法中设置任何选项?
修改 长时间运行的进程使用Mongoose来运行MongoDB进程。也许套接字挂断也可能是由与MongoDB的连接引起的?如何增加Mongoose的超时?我发现挂断发生在120秒内,所以可能是因为某些默认的超时配置?
提前致谢!
答案 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)