刷新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(); }