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