我对节点比较陌生,我正在努力寻找答案!
我已经创建了一个非常基本的节点脚本,用于连接到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
});
});