2011-05-30 94 views
0

我想扩展我的传入请求跨所有服务器。是否可以在nodejs中存储循环引用对象?

我可以在群集中完成声明全局变量存储数组中的所有传入请求。

//SERVER 1 
    var store =[]; 
    //Instance node master 
    http.createServer(function(req,res){ 


    store['InRequest1']=req; 


    }); 
    //Instance node child 
    http.createServer(function(req,res){ 


     var request = store['InRequest1']; 
     request.write('sss'); 


    }); 

但是,如果我的另一台服务器上创建另一个实例,我无法拿回店里要求:

//SERVER 2 
var request = store['InRequest1']; 
request.write('sss'); 

我发现使用memcached的/ Redis的存储圆形物体的方式(要求)但是当我尝试

memcached.set(req); //hit error unable convert circular reference objects 

无论如何可以缩放循环引用对象吗?

回答

0

但是,如果我的另一台服务器上创建另一个实例,我无法拿回店里要求

嗯什么?除非您通过服务器同步它们,否则无法工作。我会换一种方式:猜猜我现在正在考虑的数字! (提示:你显然不能)

我想扩展我的传入请求跨所有服务器。

您的方法的后半部分是正确的路要走。使用数据库来跟踪所有服务器上的数据。但是在每次继续之前,你都必须检查数据库。这最终会由于延迟而导致一些问题。

无论如何可以缩放循环引用对象吗?

我不明白这个部分。你能详细说明吗?什么循环参考?

+0

对不起,商店请求的例子不清楚。其实我想它是一个会话存储。使用Redis商店我可以扩展我的应用程序?但redis只能存储对象,字符串...我可以存储循环引用的对象在内存中吗?例如, var RedisStore = require('connect-redis'); var Client = Redis.createClient(); RedisStore.Store(Client); – user717166 2011-05-30 05:56:29

+0

变量Client是内存中的循环对象。像引用对象一样。 – user717166 2011-05-30 05:56:57

+0

redis ...是一个数据库,就像我说的。数据库中的会话是一种常见策略。这些与我所说的没有分歧。我不明白你为什么要存储链接到请求的客户端。这两者并没有很强的关联。因此,将客户端置于Redis中是不合理的? – jcolebrand 2011-05-30 06:07:02

相关问题