多worker共享事件(不稳定

This commit is contained in:
undefined committed 2020-06-26 18:30:43 +08:00
1 parent d59710ddf1
commit dd5a212422
9 files changed
+113 -20

No files matched your search

+45 -8
View File
@@ -1,15 +1,52 @@
const { EventEmitter } = require('events');
const cluster = require('cluster');
const bus = new EventEmitter();
global.Hydro.service.bus = module.exports = {
subscribe(events, handler) {
function subscribe(events, handler, funcName) {
if (!funcName) {
for (const event of events) bus.on(event, handler);
},
unsubscribe(events, handler) {
} else {
handler.__bus = (...args) => {
handler[funcName].call(handler, ...args);
};
for (const event of events) bus.on(event, handler.__bus);
}
}
function unsubscribe(events, handler, funcName) {
if (!funcName) {
for (const event of events) bus.off(event, handler);
},
publish(event, data) {
bus.emit(event, { value: data, event });
},
} else {
handler.__bus = (...args) => {
handler[funcName].call(handler, ...args);
};
for (const event of events) bus.off(event, handler.__bus);
delete handler.__bus;
}
}
function publish(event, data, isMaster = true) {
bus.emit(event, { value: data, event });
if (isMaster && global.Hydro.model.task) {
global.Hydro.model.task.add({
type: 'bus',
count: Object.keys(cluster.workers).length,
sender: cluster.worker.id,
event,
data,
});
}
}
function postInit() {
const { task } = global.Hydro.model;
task.consume({ type: 'bus' }, (data) => {
if (data.sender === cluster.worker.id) return;
publish(data.event, data.value, false);
});
}
global.Hydro.service.bus = module.exports = {
subscribe, unsubscribe, publish, postInit,
};