空闲时间后closures监听器

我有一个简单的自动启动的nodejs服务器。

它使用express来托pipe端点,它是以一个简单的app.listen(port); 命令。

由于我有一个自动启动,所以我想在空闲时间后closures服务器,比如说3分钟。

我已经手动编码它只是使用下面的函数,这是每个app.postapp.post

 //Idle timer var timer; function resetIdleTimer() { if (timer != null) clearTimeout(timer); timer = setTimeout(function () { logger.info('idle shutdown'); process.exit(); }, 3 * 60 * 1000); } 

这似乎有点粗糙,所以我想知道是否有一个整洁的方式(在某种forms的计时器express也许)。

在快速文档看,我没有看到一个简单的方法来configuration这个。

有没有更好的方法来实现这种闲置关机?

app.listen()返回一个被包装的HTTP服务器(可以在这里看到的源代码 ),然后你可以使用.close()方法 。

 var app = express(); var server = app.listen(port); setTimeout(function() { server.close(); }, 3 * 60 * 1000); 

这将防止服务器接受新的连接。 当它停止服务现有的连接时,它将优雅地停止。 这将完全停止Nodejs。

编辑:你也可能会发现这个相关的GitHub问题 。

看看永远 。 你可以把它作为一个模块join到你的应用程序中,它提供了一些可以帮助你实现你正在寻找的function的函数(比如forever.stop(index) ,它终止运行在那个索引处的节点进程。 ,你可以检索进程列表并操作string以获得正常运行时间,然后监视服务器调用之间的时间间隔,如果请求之间有3分钟的差距,我将调用forever.stop()为了终止这个过程。

我不认为这是使用你的计时器解决scheme“粗糙” 我会采取稍微不同的方法:

 app.timeOutDate = new Date().valueOf() + 1000*60*3; // 3 minutes from now, in ms function quitIfTimedout(req, res, next){ if(new Date().valueOf() > app.timeOutDate){ logger.info('idle shutdown'); process.exit(); } else { app.timeOutDate = new Date().valueOf() + 1000*60*3; //reset next(); } }; app.all('*', quitIfTimedout); 

然而,这实际上不会在3分钟后退出,而是在3分钟后退出下一个请求。 这样可能无法解决你的问题