nodejs Websocket服务器 - 检测到可能的EventEmitter内存泄漏
Posted
技术标签:
【中文标题】nodejs Websocket服务器 - 检测到可能的EventEmitter内存泄漏【英文标题】:nodejs Websocket Server - possible EventEmitter memory leak detected 【发布时间】:2016-06-26 16:49:26 【问题描述】:我对节点比较陌生,我正在努力寻找答案!
我创建了一个非常基本的节点脚本,用于连接到 rs232 串行设备,同时它用作 websocket 服务器,以便客户端可以连接到它以从 rs232 设备获取实时输出,但我在 11 个客户端连接后,不断收到事件发射器最大侦听器错误。
如果有人可以在这里帮助我,或者如果我以错误的方式处理代码,请提供一些建议。
谢谢 杰米
这是代码
var serialport = require("serialport");
var SerialPort = serialport.SerialPort;
var WebSocketServer = require("ws").Server;
var serialPort = new SerialPort("COM5",
baudrate: 9600,
parser: serialport.parsers.readline("\n")
);
var wss = new WebSocketServer( port: 3000 );
serialPort.on("open", function ()
console.log('open');
var weight = 0;
wss.on("connection", function(ws)
serialPort.on('data', function(data)
weight = data.toString();
wss.clients.forEach(function(wssclient)
wssclient.send(weight);
);
);
);
);
【问题讨论】:
你的大部分代码总是加倍空格吗? 【参考方案1】:如果您的连接处理程序,您添加一个新的事件处理程序serialPort.on('data', ...)
。因此,对于每个新传入的 websocket 连接,您为serialPort
添加一个新的事件处理程序。而且,您也永远不会删除它们。所以,它们只是永远积累,它们也都做同样的事情。
您看到的警告是因为 eventEmitter
对象看到所有事件处理程序都针对同一条消息的累积,并怀疑可能有问题。
相反,您可以将其移出连接处理程序,并在一个事件处理程序中完成所有处理:
serialPort.on('data', function(data)
var weight = data.toString();
wss.clients.forEach(function(wssclient)
wssclient.send(weight);
);
);
serialPort.on("open", function ()
console.log('open');
wss.on("connection", function(ws)
// code here that needs to happen upon connection
);
);
【讨论】:
以上是关于nodejs Websocket服务器 - 检测到可能的EventEmitter内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章