main函数文件main.js包含:
var nLastPingTime = 0,
nLastPingNumber = 0;
module.exports = {
compareData: function(nPingTime, nLastPingNumber){
nLastPingTime = nPingTime;
nLastPingNumber = nLastPingNumber;
}
};
现在另外两个文件dataGenOne.js和dataGenTwo.js看起来像这样:
const mainDataHolder = require('./main.js');
//Gets data from some API's here
mainDataHolder.compareData(nPingTime, nLastPingNumber);
然后开始我们运行:
node dataGenOne.js
和
node dataGenTwo.js
问题是main.js文件在两组数据之间不共享nLastPingTime和nLastPingNumber。
例如,当查看nLastPingNumber时,它的数字来自dataGenOne.js,而不是来自dataGenTwo.js(或反之亦然)。
我相信这是因为它们在两个不同的线程上运行。
无论如何要实现我想要做的事情?替代方案可以是连接数据库或写入文件,但如果可能的话,我宁愿不这样做。
答案 0 :(得分:1)
为了实现你想要做的事情,让两个节点进程进行通信,你将拥有创建进程,让我们调用它生成,产生两个进程(让他们称之为p1和p2)然后处理p1和amp;之间的通信P2
因此,spawn将是一个非常简单的过程,只需为p1和amp; p2然后将这些事件转发给另一个进程。我没有这方面的工作示例,但是如果你看一下here,你应该能够很快地把它拼凑起来。
答案 1 :(得分:1)
亚当·H(Adam H)正确地指示了我。实际上,正确的方法是child_processes。
下面是代码更改:
主要功能文件main.js现在具有:
var cp = require('child_process');
var childDataOne = cp.fork('./dataGenOne.js', [process.argv[2]], { silent: true });
var childDataTwo = cp.fork('./dataGenTwo.js', [process.argv[3]], { silent: true });
childDataOne.stdout.on('data', function(data) {
console.log('parent: ' + data);
compareData(data);
//Here is where the output goes
});
childDataTwo.stdout.on('data', function(data) {
console.log('parent: ' + data);
compareData(data);
//Here is where the output goes
});
现在另外两个文件dataGenOne.js和dataGenTwo.js更改为如下内容:
process.stdin.resume();
var passingString = nPingTime + "," + nLastPingNumber;
process.stdout.write(passingString);
要开始运行,我们只需要做:
node main.js param1 param2
代替单独运行dataGenOne.js和dataGenTwo.js。
这正确地允许子进程将数据传递回父进程。 main.js正在使用stdout.on进行侦听,而两个dataGen子进程正在通过stdout.write传递数据。
答案 2 :(得分:0)
为了避免在某处存储这些变量的复杂性,请合并进程,但重新组织代码以便于导航。
main.js(比较函数?) - 从顶部删除变量,但要确保compare函数返回最新的ping值以及比较数据,即
return {
data,
lastPingTime,
lastPingNumber
}
将api内容移动到单独的文件中,以便您可以执行此操作
var dataSetOne = require('./dataOne');
var dataSetTwo = require('./dataTwo');
var datasets = [dataSetOne, DataSetTwo];
// initialize the values
var lastPingTime = 0;
var lastPingNumber = 0;
// loop through the datasets
for (var i = 0, len = datasets.length; i < len; i++) {
let currentDataSet = datasets[i];
const results = comparePrices(lastPingTime, lastPingumber, aAsks, aBids);
// update the ping info here
lastPingTime = results.lastPingTime;
lastPingNumber = results.lastPingNumber;
}
如果您有很多数据集,请制作一个&#39; index.js&#39;执行所有这些操作的文件,只返回数据集数组。
希望有所帮助!