【发布时间】: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