2013-12-13 3 views
0

Если сообщение поступило на сервер01, будут инициированы сообщения о событиях server01 и server02. Я думал, что линияСобытия Nodejs срабатывают несколько раз

Socket.prototype = new events.EventEmitter; 

приведет к укомплектовать отдельные экземпляры событий

Спасибо за любую помощь!

var events = require('events'); 
var uuid = require('uuid'); 

// Server class 
function Socket (host) { 
    var self = this; 

    self.options = { 
    "serverHost": host, 
    "serverName": "server", 
    "clientName": uuid.v4() 
    }; 

    self.socket = new require('zmq').socket('router'); 
    self.socket.identity = self.options.clientName; 
    self.socket.connect('tcp://' + self.options.serverHost); 

    self.socket.on('message', function (sender, data) { 
    console.log('Sender: %s', self.options.clientName); 
    console.log('Data: %s', data.toString()); 
    self.emit('message', sender, data); 
    }); 

    setInterval(function() { 
    self.socket.send([self.options.serverName, uuid.v4()]); 
    }, 5000); 

    self.send = function (obj, callback) { 
    var status = true; 

    if(obj !== 'object') { 
     status = false; 
    } else { 
     self.socket.send([self.options.serverName, obj]); 
    } 

    if(callback === 'function') { 
    callback(status); 
    } else { 
     return status; 
    }; 
    }; 
}; 

Socket.prototype = new events.EventEmitter; 

// Userland 

var server01 = new Socket('127.0.0.1:3000'); 

server01.on('message', function (sender, data) { 
    console.log('Server01: %s', data.toString()); 
}); 

var server02 = new Socket('127.0.0.1:3000'); 

server02.on('message', function (sender, data) { 
    console.log('Server02: %s', data.toString()); 
}); 

Вот пример вывода из этого сценария

Sender: 14d36a66-a4e7-484a-9ce0-3f0d368a6986 
Data: 03e6bb47-6af0-4700-9b95-7bbc310477f6 
Server01: 03e6bb47-6af0-4700-9b95-7bbc310477f6 
Server02: 03e6bb47-6af0-4700-9b95-7bbc310477f6 
Sender: 59ec292e-abd2-4c9f-ac3e-2bf92c656fde 
Data: d66cd320-c3f2-4842-b66b-1d89f656d32f 
Server01: d66cd320-c3f2-4842-b66b-1d89f656d32f 
Server02: d66cd320-c3f2-4842-b66b-1d89f656d32f 

ответ

1

Проблема заключается в том, как вы управлять наследования. Исправить код JavaScript для наследования:

Socket.prototype = Object.create(EventEmitter.prototype); 
+0

Спасибо за быстрый ответ, мне потребовалось два взгляда, чтобы понять, как это работает. Код теперь работает так, как ожидалось, еще раз спасибо – Nekinie

Смежные вопросы