刷新Node.JS中的Buffer数据

目前在应用程序中有问题。

我的应用程序被devise为在Raspberry PI上打开RFID阅读器。 它继续读取传入的RFID标签。

代码如下:

// Socket.io server details var io = require('socket.io').listen(3000); // Serialport plugin declared and made a serialport variable var serialport = require("serialport"); var SerialPort = serialport.SerialPort; // Variable containing technical USB port details var serialPort = new SerialPort("/dev/ttyUSB0", {baudrate: 2400, parser: serialport.parsers.readline("\n")} , false); // this is the openImmediately flag [default is true] io.sockets.on('connection', function (socket) { console.log('user connected'); socket.on('ping', function (data) { serialPort.open(function () { // Open notification console.log('opening RFID scanner'); //Start listening serialPort.on('data', function(data) { if (data.trim() !== '') { io.sockets.emit('pong', data); socket.disconnect(); } }); }); }); }); 

我打开应用程序,它工作得很好。 它可以不断读取卡的标签。 然而; 当我使用不同的卡,Node.JS似乎使用某种缓冲区。

一个例子;

我扫描卡A,返回标签AAA。 我扫描卡A,返回标签AAA。 我扫描卡B,返回标签AAA。 我扫描卡B,返回标签AAA。 我扫描了卡B,返回标签BBB(应该返回的那个)。

这总是在改变标签时发生。

Node.JS中是否有某种缓冲区存储尚未传输的数据缓冲区?

我知道.drain(callback) ,但我怎么能以适当的方式实现这一点?

我并不完全了解node-serialport库,但是在接收数据时确实有类似的问题。

每当我的数据值发生变化时,我总是会收到一个前一个值,然后在下一个“数据”块上接收正确的值。

我通过在node-serialport API中使用“flush”方法来解决这个问题。

一个粗糙的做法是:

 sp.flush(function(err,results){}); 

尝试在断开套接字连接之前进行testing。

  if (data.trim() !== '') { io.sockets.emit('pong', data); sp.flush(function(err,results){}); socket.disconnect(); }