Pergunta

Atualmente ter um problema em um aplicativo.

Meu aplicativo é projetado para abrir um leitor de RFID em um Raspberry PI.Ele continua a ler a entrada de tags RFID.

O código é o seguinte;

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

Eu abrir o aplicativo, e ele funciona muito bem.Ele constantemente pode ler tags de um cartão.No entanto;quando eu uso um cartão diferente, Node.JS parece utilizar algum tipo de buffer.

Um exemplo;

Eu digitalização de cartão, retorno tag AAA.Eu digitalização de cartão, retorno tag AAA.Eu de verificação do cartão de B, retorno tag AAA.Eu de verificação do cartão de B, retorno tag AAA.Eu de verificação do cartão de B, retorno tag BBB (O que era suposto ser devolvido).

Este parece sempre acontecer quando alterando as tags.

Existe algum tipo de buffer no Node.JS, que armazena em um buffer de dados que não era transmitida ainda?

Eu estou ciente das .de drenagem (chamada de retorno), mas como eu poderia implementar isso em um bom caminho?

Foi útil?

Solução

Eu não entendo completamente o nó-serialport biblioteca, mas eu tive um problema semelhante quando a recepção de dados.

A cada vez que meus dados do valor alterado, eu sempre recebidos com o valor anterior, uma vez que antes de receber o valor correto na próxima 'dados' bloco.

Eu resolvi usando o "flush" método no nó-serialport API.

Uma forma rudimentar de fazê-lo seria:

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

Tente testar este direito antes de desconectar a conexão de soquete.

 if (data.trim() !== '') {
      io.sockets.emit('pong', data);
      sp.flush(function(err,results){});
      socket.disconnect();
 }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top