2017-06-14 30 views
0

我在Nodejs中使用3個文件。 File1.js1 has a counter = 11和getter() setter()File2.js將該值設置爲counter=10。但是當我在File3.js中檢索計數器的值時,我可以將舊值1,而不是由File2設置的值。節點變量得到重置

//=====File1.js===== 

var store = module.exports = { 
    counter: 1, 
    getCounter: function() { 
     return store.counter; 
    },  
    setCounter: function (value) { 
     store.counter = value; 
    } 
} 

//=====File2.js===== 

var c = require('./File1');  
c.setCounter(10);  
console.log(c.getCounter()) //prints 10 

//=====File3.js===== 

var c = require('./File1');  
console.log(c.getCounter()) //prints 1 

這似乎是一個簡單的概念unfaltered。我認爲問題在這裏,我不知道如何解決它。

File1和File2在Node-service-1上運行(可在http://localhost:1000處運行)並且File3在Node-service-2上運行(在http://localhost:1100處可用)。

在典型的場景中,多個用戶訪問Node-service-1和Node-service-2,只有第一個用戶獲得1000個可用。我使用portfinder包獲取下一個可用端口,並在1001上爲User2運行Node-service-1。但Node-service-2不知道User2在端口1001上運行服務,並且錯誤地嘗試獲取1000(對於User2 )並失敗。

所以問題是Node-service-2如何知道Node-service-1運行的端口?

回答

0

如果file3.js是在不同的節點實例運行file2.js那麼它會看到file1.js模塊的一個file2.js看到的不同實例。因此,如果兩個腳本在單獨的節點實例上運行,則無法使用此方法在兩個腳本之間進行通信。如果您需要在兩個節點實例上的兩個腳本之間進行通信,那麼您將不得不使用套接字,共享內存或共享文件(例如公用數據庫)方法進行通信。

+0

我也相信套接字連接,我需要知道節點服務1運行的端口。那是對的嗎 ? – mehtak

+0

那麼,您需要在一個節點實例上實現套接字偵聽器,然後讓另一個實例上的代碼連接到正確的端口號。研究可用於節點實例之間通信的不同選項並選擇最符合您需要的現有解決方案可能更有意義。 –

+0

謝謝@Julian Goacher我會進一步研究它。 – mehtak