nodejs的pubsubdevise模式
我正在寻找一个简单的pubsub实现,我可以使用nodejs或simliar的方式。 我只需要在服务器端,所以没有花哨的需要。
我想要有以下能力:
模块A发布事件'X'模块B订阅事件'X'而不知道模块A的任何内容(除了可能发送了什么参数)
我testing了这个简单的实现https://github.com/federico-lox/pubsub.js/blob/master/src/pubsub.js真的是它的工作
我用简单的pubsub实现当前的问题是,我不能简单地订阅事件。
如果模块A发布了一个事件,但模块B是不需要的,它将永远不会收到来自模块A的事件。一旦模块A需要模块B发布一个事件,它当然是有效的。 但是这很不愉快。
所以简而言之:我正在寻找一种与nodejs配对的devise模式,并允许我非常独立地编写模块(松散耦合),可以通过事件进行通信。 你们有什么build议吗?
我也看了nodejs eventemitter,但找不到它的好用(也许我只是不能看到它?)
更新:我进一步了解进度,并提出了这个问题:
emitter.js
var events = require('events'); var emitter = new events.EventEmitter; module.exports = emitter;
moduleA.js
var emitter = require('./emitter.js'); require('./moduleB.js'); // this shows off my problem emitter.emit('moduleA');
moduleB.js
var emitter = require('./emitter.js'); emitter.on('moduleA', function () { console.log('reacted to event from moduleA'); });
这显示了我的“问题”,但我不确定是否有解决办法。 也许我的做法是完全错误的,但在浏览器端这应该工作,因为所有代码预加载在页面加载
下面是一个简单的基本事件pipe理使用节点的核心events
模块模板。
//modA.js var events = require('events'); var emitter = new events.EventEmitter; function funcA() { console.log('mod@.funcA executing'); emitter.emit('funcA'); } module.exports = { funcA: funcA, emitter: emitter };
//modB.js var events = require('events'); var emitter = new events.EventEmitter; function funcB() { console.log('modB.funcB executing'); emitter.emit('funcB'); } module.exports = { funcB: funcB, emitter: emitter };
//glue.js var modA = require('./modA'); var modB = require('./modB'); modA.emitter.on('funcA', modB.funcB); modA.funcA();
node glue.js mod@.funcA executing modB.funcB executing