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

zs2*_*020 2 web-services node.js connection-reset restify econnreset

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

[Error: socket hang up] code: 'ECONNRESET'
Run Code Online (Sandbox Code Playgroud)

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

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

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

提前致谢!

小智 6

您可以在对象上使用标准套接字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();
});
Run Code Online (Sandbox Code Playgroud)