【问题标题】:Real-time data acquisition from serial port with node.js使用node.js从串口实时获取数据
【发布时间】:2019-01-04 19:50:44
【问题描述】:

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

MaxListenersExceededWarning:可能的 EventEmitter 内存泄漏 检测到。添加了 11 个数据监听器。使用emitter.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);

【问题讨论】:

标签: javascript node.js real-time


【解决方案1】:

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

var EventEmitter = require('eventemitter3');

var eventEmitter = new EventEmitter();

【讨论】:

    猜你喜欢
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多