[英]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.