Nodejs事件多次触发
Nodejs events firing multiple times
如果server01收到消息,则会触发server01和server02的消息事件。我以为线路
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
问题在于管理继承的方式。用于继承的正确JavaScript代码是:
Socket.prototype = Object.create(EventEmitter.prototype);
相关文章:
- NodeJS-readline暂停和恢复事件发射器(逐行读取)
- 在Nodejs中堆叠异步回调事件的最佳方式
- 在NodeJS中使用类函数作为事件侦听器
- 通过进程使用 NodeJS 全局事件是个好主意吗?
- Nodejs事件多次触发
- NodeJS中的事件,事件正在setInterval内发出,但不能没有setInterval
- nodeJS 等待无法承诺的事件
- 是否可以在 NodeJS 中模拟键盘/鼠标事件
- 当事件发生时调用nodejs中的函数
- NodeJS&Socket.IO:发出请求事件并获取响应,我应该在何时/何地绑定侦听器
- 如何在 nodejs 中维护事件循环中的持久数据
- NodeJS如何将onchange事件添加到字符串中
- 使用 on nodejs 从另一个模块捕获事件
- NodeJS + SocketIO 大套接字事件管理
- “事件发射器内存泄漏”发生,尽管使用了最新版本的nodejs
- 具有多个“数据”事件处理程序和竞争条件的 NodeJS 流
- Nodejs正在侦听来自http.get()的数据事件的响应流
- 在nodejs express模块中处理所有事件之前发送响应
- 服务器关闭时触发事件(NodeJS)
- RxJS对已发出的事件nodejs进行分组