簡體   English   中英

Node.js事件代理

[英]Node.js event proxy

我目前有一個可行的解決方案,但我想從我的服務器代碼中刪除冗余操作。

我目前在我的快遞應用程序中擁有的內容如下:

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

這是一些更多的文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM