66 lines
1.5 KiB
JavaScript
66 lines
1.5 KiB
JavaScript
/** @type {import('node:cluster').Cluster} */
|
|
const cluster = require("cluster");
|
|
const os = require("os");
|
|
const {randomInt} = require("crypto");
|
|
|
|
cluster.schedulingPolicy = cluster.SCHED_RR;
|
|
|
|
async function main()
|
|
{
|
|
let master = new Map();
|
|
|
|
if(cluster.isPrimary)
|
|
{
|
|
let e = 0|0
|
|
while (e < 10)
|
|
{
|
|
e++;
|
|
let flow = await generateFlow();
|
|
flow.send({
|
|
TYPE:"start"
|
|
})
|
|
master.set(flow.id, flow);
|
|
flow.message((_id, obj) =>{
|
|
for (const [id,{send}] of master) {
|
|
if(_id !== id)
|
|
{
|
|
send({
|
|
...obj,
|
|
pid: flow.id
|
|
})
|
|
}
|
|
}
|
|
})
|
|
};
|
|
}else{
|
|
let Application;
|
|
let synced = [];
|
|
process.on("message",data => {
|
|
switch(data.TYPE)
|
|
{
|
|
case "start":{
|
|
Application = require("./Source/index");
|
|
break;
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
async function generateFlow(N)
|
|
{
|
|
const worker = cluster.fork();
|
|
await new Promise(ok => {
|
|
worker.addListener("online",()=> {
|
|
ok()
|
|
})
|
|
});
|
|
let id = worker.process.pid;
|
|
|
|
return {
|
|
id,
|
|
send: message => worker.send(message),
|
|
message: (callback) => worker.addListener("message", e => callback(id,e))
|
|
}
|
|
}
|
|
process.nextTick(main); |