我正在寻找一个可以在 nodejs 或类似方式中使用的简单 pubsub 实现。我只在服务器端需要它,所以不需要花哨的 faye。
我想拥有以下能力:
模块 A 发布事件“X”模块 B 订阅事件“X”而不知道模块 A 的任何信息(可能发送的参数除外)
我测试了这个简单的实现https://github.com/federico-lox/pubsub.js/blob/master/src/pubsub.js真正做到了它的工作
我目前使用简单的 pubsub 实现的问题是我不能简单地订阅事件。
如果模块 A 发布了一个事件,但在任何地方都不需要模块 B,它将永远不会收到来自模块 A 的事件。当模块 A 在发布事件之前需要模块 B 时,它当然可以工作。但这是相当不愉快的。
所以简而言之:我正在寻找一种与 nodejs 搭配得很好并允许我非常独立地(松散耦合)编写可以通过事件进行通信的模块的设计模式。大家有什么推荐的呢?
我还查看了 nodejs eventemitter 但找不到很好的用法(也许我只是看不到它?)
更新: 我对事件发射器进行了更深入的研究,并想出了这个:
发射器.js
var events = require('events');
var emitter = new events.EventEmitter;
module.exports = emitter;
模块A.js
var emitter = require('./emitter.js');
require('./moduleB.js'); // this shows off my problem
emitter.emit('moduleA');
模块B.js
var emitter = require('./emitter.js');
emitter.on('moduleA', function () {
console.log('reacted to event from moduleA');
});
这表明了我的“问题”,但我不确定是否有办法解决。也许我的方法是完全错误的,但在浏览器端这应该可以工作,因为所有代码都是在页面加载时预加载的