嗨,我需要在节点集群上的帮助这是程序的框架
global values a,b,c
function1{
get data from websocket and update the value a,b,c for every incomming message from datastream.
}
function2{
while(1){
do some processing using a,b,c values.
}
}
函数1更新数据一次,如果从websocket流中获取任何数据,数据可能随时到达-例如有时每秒钟100个数据,有时每10秒2个数据。因此,无论数据何时到达,函数2都必须运行(即连续运行)
需要并行运行这些函数1和2,就像在不同的cpu上(或作为群集)尝试在async.parallel上运行一样,但它在单个线程上运行,因此直到函数2中的while循环结束为止,函数1将是o pause。因此,不能使用它,因此需要在不同的线程上并发运行。我看到了集群模块,并尝试使用它,但是,看到这个场景了吗
if (cluster.isPrimary) {
function 1()
//creating child process in other thread
cluster.fork();
} else {
function 2()
}
但在这种情况下,子集群无法访问全局值a、b、c,因为它们是使用函数1更新/分配的,所以子集群无法访问主集群的全局变量a、b、c,子集群的a、b、c将为空,因为它不会在子线程上运行函数1。我需要的是在不同的线程上并行运行这两个函数。运行cluster.fork时,有没有办法在另一个线程中运行函数2,以便它可以访问全局变量a、b、c。
----实际代码是这样的
const cluster = require('cluster');
const numCPUs = require('os').cpus().length;
var t = 1;
var pca = "1";
var pcb = "1";
var pta = "1";
var ptb = "1";
var datato = {
"method": "SUBSCRIBE",
"params": [
"trxusdc@bookTicker"
],
"id": 1
}
var axios = require('axios');
var configt = {
method: 'get',
url: 'https://api.binance.com/api/v3/ticker/bookTicker?symbol=TRXUSDT',
headers: {}
};
var configc = {
method: 'get',
url: 'https://api.binance.com/api/v3/ticker/bookTicker?symbol=TRXUSDT',
headers: {}
};
async function mymodule_init0() {
axios(configc)
.then(function(response) {
pca = JSON.parse(JSON.stringify(response.data)).askPrice;
pcb = JSON.parse(JSON.stringify(response.data)).bidPrice;
console.log("1");
//--------subaxios for usdt
axios(configt)
.then(function(response) {
pta = JSON.parse(JSON.stringify(response.data)).askPrice;
ptb = JSON.parse(JSON.stringify(response.data)).bidPrice;
console.log("2");
// mymodule_init1();
})
.catch(function(error) {
console.log(error);
});
})
.catch(function(error) {
console.log(error);
});
}
async function mymodule_init1() {
const WS = require('ws')
const ws = new WS('wss://stream.binance.com:9443/ws/trxusdt@bookTicker')
ws.on('message', function incoming(sdata) {
if (JSON.parse(sdata).s == "TRXUSDC") {
pca = JSON.parse(sdata).a;
pcb = JSON.parse(sdata).b;
}
if (JSON.parse(sdata).s == "TRXUSDT") {
pta = JSON.parse(sdata).a;
ptb = JSON.parse(sdata).b;
}
if (t == 1) {
ws.send(JSON.stringify(datato));
t++;
}
});
}
async function mymodule_init2() {
while (1) {
console.log(pca + " \t " + ptb + "\t" + pta + " \t " + pcb );
}
}
setTimeout(function() {
new Promise(resolve => {
if (cluster.isPrimary) {
console.log(`Primary ${process.pid} is running`);
// Fork workers.
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`worker ${worker.process.pid} died`);
});
}
parallel(mymodule_init1(), mymodule_init2());
})
}, 5000);
mymodule_init0();
所以我需要在不同的线程中运行模块init 2,我的意思是,无论主线程中的函数是什么,它都应该并行/单独运行
暂无答案!
目前还没有任何答案,快来回答吧!