【问题标题】:Custom event being fired multiple times when emit is called only once仅调用一次发出时多次触发自定义事件
【发布时间】:2016-07-25 22:56:43
【问题描述】:

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

名为newmessage 的事件被触发等于使用 web-socket-server 打开的套接字数。我无法理解原因。虽然在调试的时候发现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();
    });
});

这里是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 事件中。

【问题讨论】:

    标签: javascript node.js sockets events


    【解决方案1】:

    每次调用 EventEmitter.on( ) 时,它都会添加另一个侦听器。当您发出事件时,它们会同时触发。

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

    【讨论】:

      猜你喜欢
      • 2023-03-21
      • 2020-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多