Node.js事件代理

我目前有一个解决scheme,但是我想从我的服务器代码中删除多余的操作。

我现在在我的快速应用程序中是这样的:

// 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); 

这里是一些更多的文档