Node.js事件代理



我目前有一个可用的解决方案,但我想从服务器代码中删除冗余操作。

我目前在我的快递应用程序中有这样的东西:

// create a ZMQ socket connection
var zmq_sock = require('zmq').socket('dealer').connect(ENDPOINT);
// On a new socket.io connection from a client, register that client as a listener
// to any zmq event, and unregister the client upon disconnect
io.sockets.on('connection', function(socket) {
var client_callback = function(id, msg) { 
// some expensive operation
socket.emit('data', json_data); // socket.io emit to the client
};
zmq_sock.on('message', client_callback);
socket.on('disconnect', function() {
zmq_sock.removeListener('message', client_callback);
});
});

问题是,对于每个ZMQ事件,都是在每个客户端的基础上执行昂贵的操作。我想做的是以某种方式拥有一个事件代理,每个客户端在该代理中注册/注销自己,当ZMQ事件发生时,代价高昂的操作会发生一次,然后将结果发送给每个客户端。

有没有一种简单的方法可以在节点或节点模块中做到这一点,帮助将事件联系在一起?文档、教程或示例也将不胜感激!

您应该使用事件发射器模式。

//Event emitter pattern
var events = require('events');
function EventManager() {
events.EventEmitter.call(this);
this.wakeUp = function (message) {
this.emit(message);
}
};
var util = require('util');
util.inherits(EventManager, events.EventEmitter);
var manager = new EventManager();
manager.setMaxListeners(0); //max is now infinity

您可以注册活动

manager.on(callback);//callback is a function.

定义后,可以使用抛出事件

manager.wakeUp(message);

另外,不要忘记注销

manager.removeListener(callback);

以下是更多文档

相关内容

  • 没有找到相关文章

最新更新