节点有状态吗? Node可以将变量保存在内存中

时间:2014-07-11 14:00:19

标签: javascript node.js

节点有状态吗?

如果我想构建一个保留在内存中的索引,它会在不同的连接中持续存在吗?我只是想知道这是否可行。例如,我们在java中有一个服务器,它在内存中维护一个hashmap以加速某些搜索查询。它会随着事情的进行而修改它。这在Node中是否可行?

感谢。

3 个答案:

答案 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";