空闲时间后closures监听器
我有一个简单的自动启动的nodejs服务器。
它使用express来托pipe端点,它是以一个简单的app.listen(port);
命令。
由于我有一个自动启动,所以我想在空闲时间后closures服务器,比如说3分钟。
我已经手动编码它只是使用下面的函数,这是每个app.post
上app.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分钟后退出下一个请求。 这样可能无法解决你的问题