nodejs Websocket服务器-检测到可能的EventEmitter内存泄漏



我对节点比较陌生,我正在努力寻找答案!

我已经创建了一个非常基本的节点脚本,用于连接到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);
            });
        });
    });
});

如果您的连接处理程序,您添加一个新的事件处理程序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
    });
});

相关内容

  • 没有找到相关文章

最新更新