自定义事件被发射多次,只有一次被调用

我正在使用ws模块来实现networking套接字。

名为newmessage的事件被触发,等于使用web-socket-server打开的套接字数量。 我不明白原因。 虽然在debugging中我发现这个发射只被触发一次,但事件函数被调用了两次。

 var SocketServer = require("./lib/SocketServer"); // Creating the object starts the server on this.socketPort var sserver = new SocketServer(webSocketPort); // Calling activateListeners on SocketServer instance, activates // all the event listeners associated with SocketServer sserver.activateListeners(); sserver.on("newsocket",function(socket,status) { infoLogger.setMessage(`New socket opened: ${socket}`).log(); sserver.on("newmessage",function(message,status) { // BEING CALLED = NUMBER OF SOCKETS OPENED infoLogger.setMessage(`New message received: ${message}`).log(); }); }); 

这是SocketServer函数:

 'use strict'; var WebSocketServer = require("ws").Server , EventEmitter = require("events").EventEmitter , util = require("util") , Logger = require("./Logger"); function SocketServer(port) { this.socketPort = port; // Starts WebSocket Server this.socketServer = new WebSocketServer({port: this.socketPort}); var logger = new Logger(`Socket server started on ${this.socketPort}`,0).log(); } util.inherits(SocketServer,WebSocketServer); SocketServer.prototype.activateListeners = function() { var that = this; this.socketServer.on("connection",function(socket) { that.emit("newsocket",socket,200); socket.on("message",function(message) { that.emit("newmessage",message,200); }); }); }; // Exports module.exports = SocketServer; 

这可能是什么原因? newsocket事件只被触发一次,问题只发生在由SocketServer触发的newmessage事件中。

每次调用EventEmitter.on()时,都会添加另一个侦听器。 当你发射你的事件时,他们都会立刻开火。

您可以进行一些检查,以查看事件侦听器是否已经存在,并避免再次添加事件侦听器。