MWSE/index.js

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);