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);
这里是一些更多的文档