[英]Custom event being fired multiple times when emit is called only once
I am using ws module to implement web sockets. 我正在使用ws模块来实现Web套接字。
The event named newmessage
is being fired equal to the number of sockets open with the web-socket-server. 名为
newmessage
的事件被触发等于使用web-socket-server打开的套接字数。 I could not understand the reason. 我无法理解原因。 Although on debugging I found that the emit is fired only once, but the event function is called twice.
虽然在调试时我发现只触发了一次emit,但是事件函数被调用了两次。
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();
});
});
Here is the SocketServer
function: 这是
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;
What could be the reason for this? 这可能是什么原因?
newsocket
event gets fired only once and the problem occurs only with newmessage
event fired by SocketServer
. newsocket
事件只被触发一次,只有在SocketServer
触发newmessage
事件时才会出现问题。
Every time you call EventEmitter.on( ) it adds another listener. 每次调用EventEmitter.on()时,它都会添加另一个侦听器。 When you emit your event, they all fire at once.
当您发出事件时,它们会立即发射。
You can put some checks to see if the event listener already exists and avoid adding it again if it does. 您可以进行一些检查以查看事件侦听器是否已存在,并避免再次添加它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.