使用node.js从串行端口实时获取数据

时间:2018-07-27 16:36:20

标签: javascript node.js real-time

我正在一个需要从串行端口实时获取数据的项目中。数据流确实非常快,并且基本上是实时测量的点的列表。我正在与serialport合作,以便处理与客户进行通信的通信部分,socket.io(与包含要绘制点的图表的网页)。当我每秒发送1点时,它可以正常工作,但是当数据流很快时(例如1点/10ms),node.js会显示此错误:

  

MaxListenersExceededWarning:可能的EventEmitter内存泄漏   检测到。添加了11个数据侦听器。使用generator.setMaxListeners()来   增加限制

我的问题是:是否有解决方案可实时处理如此快速的流量?我的第一个想法是关于使用生产者使用者算法和队列从串行端口收集数据的地方。我想知道是否还有更多优化的解决方案。

这种情况是这样的:

节点:js:GET_VALUE
单片机:1234
节点:js:GET_VALUE
微控制器:5678

我的代码:

function readFromUART() {
        chosenPort.write(cmdGetValue, function(err) {
        if (err) {
            return console.log('Error on write: ', err.message);
        }
        });
            console.log('NODE: GATHER DATA');
        parser.on('data', function(data){
            console.log(data);

每X毫秒调用一次此函数

setInterval(readFromUART, 1000);

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。最好使用eventemitter3而不是eventemmiter。它在实时应用中具有高性能。

  

var EventEmitter = require('eventemitter3');

     

var eventEmitter =新的EventEmitter();