2011-05-30 80 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

相關問題