2017-06-14 33 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