简体   繁体   English

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

[英]Real-time data acquisition from serial port with node.js

I am working on a project that requires real-time data acquisition from the serial port. 我正在一个需要从串行端口实时获取数据的项目中。 Data flow is really fast and it's basically a list of points measured in real time. 数据流确实非常快,并且基本上是实时测量的点的列表。 I am working with serialport in order to handle the communication part, socket.io to communicate with the client (A web page that contains a chart where points should be plotted). 我正在使用serialport以便处理与客户端进行通信的通信部分socket.io (包含应绘制点的图表的网页)。 When I send 1 point per second, it works fine but when the data flow is fast (like 1 point/10ms) node.js shows this error: 当我每秒发送1点时,它工作正常,但是当数据流很快时(例如1点/10ms),node.js显示此错误:

MaxListenersExceededWarning: Possible EventEmitter memory leak detected. MaxListenersExceededWarning:检测到可能的EventEmitter内存泄漏。 11 data listeners added. 添加了11个数据侦听器。 Use emitter.setMaxListeners() to increase limit 使用generator.setMaxListeners()增加限制

My question is:Is there a solution to handle such a fast flow in real-time? 我的问题是:是否有解决方案可实时处理如此快速的流量? My first thoughts where about using a producer consumer algorithm and a queue to collect data from serial port. 我的第一个想法是关于使用生产者使用者算法和队列从串行端口收集数据的地方。 What I would like to know if there is more optimized solutions. 我想知道是否还有更多优化的解决方案。

The scenario is like this: 场景是这样的:

Node:js: GET_VALUE 节点:js:GET_VALUE
Microcontroller: 1234 微控制器:1234
Node:js: GET_VALUE 节点:js:GET_VALUE
Microcontroller: 5678 微控制器:5678

My code: 我的代码:

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);

This function is called every X ms 每X毫秒调用一次此函数

setInterval(readFromUART, 1000);

I found a solution. 我找到了解决方案。 It's better to use eventemitter3 rather than eventemmiter . 最好使用eventemitter3而不是eventemmiter It has high performance in real-time applications. 它在实时应用中具有高性能。

var EventEmitter = require('eventemitter3'); var EventEmitter = require('eventemitter3');

var eventEmitter = new EventEmitter(); var eventEmitter = new EventEmitter();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Rails 3:从Node.js / MongoDB向用户显示实时数据 - Rails 3: Show Real-Time Data to User from Node.js/MongoDB 使用Node.js实时读取文件 - Reading a file in real-time using Node.js Node.js中的异步查询是否有助于克服实时数据流中的延迟? - Do Asynchronous Queries In Node.js Help Overcome Latency In Real-Time Data Stream? 如何使用履行部分中的Node.js接收实时数据库中的最新数据? - How do i receive the most recent data in Real-Time Database using the Node.js in the fulfillment section? Node.js无法从连接到MSP430启动板的串行端口看到任何数据 - Node.js cant see any data from Serial port Connected to MSP430 Launch Pad 如何使用 Node.js 和 Firebase 制作实时列表 - How can I make real-time list using Node.js and Firebase 我应该使用Node.js而不是Rails用于实时WebApps吗? - Shall I use Node.js Instead of Rails for Real-time WebApps? 使用NowJS / Node.js实时跟踪在线/离线状态? - Keeping track of online/offline status in real-time with NowJS/Node.js? 如何在react-native中使用node.js和Socket.io实现实时聊天? - How to Implement real-time chatting using node.js and Socket.io in react-native? 没有Node.js的实时HTML5 Web应用程序 - Real-time HTML5 web application without Node.js
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM