【问题标题】:Flushing Buffer data in Node.JS在 Node.JS 中刷新缓冲区数据
【发布时间】:2014-10-01 02:05:08
【问题描述】:

当前在应用中遇到问题。

我的应用程序旨在打开 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),但我怎样才能以正确的方式实现它?

【问题讨论】:

    标签: javascript node.js raspberry-pi rfid


    【解决方案1】:

    我对node-serialport库不是很了解,但是在接收数据的时候确实遇到了类似的问题。

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

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

    一种粗略的做法是:

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

    在断开套接字连接之前尝试测试一下。

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

    【讨论】:

    • 你能解释一下 sp 是什么类型的对象吗?提前谢谢你
    • spSerialPort 的一个实例,serialport 模块提供的一个类,代表串行连接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    • 1970-01-01
    • 2011-08-25
    • 2017-10-23
    • 2015-08-10
    • 1970-01-01
    相关资源
    最近更新 更多