节点有状态吗?
如果我想构建一个保留在内存中的索引,它会在不同的连接中持续存在吗?我只是想知道这是否可行。例如,我们在java中有一个服务器,它在内存中维护一个hashmap以加速某些搜索查询。它会随着事情的进行而修改它。这在Node中是否可行?
感谢。
答案 0 :(得分:6)
绝对。这是我认为你正在寻找的一个简单的例子(来自http://nodejs.org的修改样本代码):
var http = require('http');
var foo = 0;
http.createServer(function (req, res) {
foo += 1;
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('You are foo number ' + foo + '\n');
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');
请注意,除了最短暂的数据类型外,通常不会执行此类操作。如果您的 little 更具持久性,请查看使用redis
之类的内容答案 1 :(得分:3)
是的,您可以在流程中保持状态,并在流程的生命周期内保留在内存中。有些库可用于散列图,LRU高速缓存和其他常用的数据结构。
答案 2 :(得分:2)
您可以在节点中使用等效的静态变量。第一次需要文件时,节点将运行该文件中的代码。这意味着如果您在范围级别上定义等于或高于module.exports
的变量,您将始终可以从内部闭包访问这些变量。
(function(){
var aStaticVariable = 123;
module.exports = function() {
// an instantiable object
}
})();
您还有全局变量:
global.aGlobalVar = "foo";