今天,我第一次在“生产”模式下运行 Node.js 应用程序,并收到以下警告:
Warning: connection.session() MemoryStore is not
designed for a production environment, as it will leak
memory, and obviously only work within a single process.
我只需要运行一个进程,但是我应该使用什么来代替呢?我希望我的会话驻留在 RAM 中以便快速访问。我还希望能够通过简单地关闭 Node 应用程序来放弃所有会话。
仅仅为了这个简单的任务而安装 Redis、MongoDB 或其他数据库似乎有些过分了。我也不明白为什么 MemoryStore 包含在 Node 中,而实际上不应该使用它?
好的,在与 Connect 开发人员交谈后,我获得了更多信息。这里有两件事被认为是内存泄漏:
- JSON 解析问题已在最新版本中修复
- 事实上,如果用户从不访问过期会话,则不会清理它们(即唯一的清理是按访问进行的)
解决方案似乎相当简单,至少这是我打算做的:使用 setInterval 定期清理过期的会话。 MemoryStore提供了all()来获取列表,我们可以使用get()来强制读取,从而使它们过期。伪代码:
function sessionCleanup() {
sessionStore.all(function(err, sessions) {
for (var i = 0; i < sessions.length; i++) {
sessionStore.get(sessions[i], function() {} );
}
});
}
现在只需通过 setInterval() 定期调用会话清理,您就可以对过期会话进行自动垃圾收集。不再有内存泄漏。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)