El websocket node.js se bloquea cuando el cliente se desconecta

Soy muy nuevo enNodeJS yWebsockets, pero estoy tratando de jugar con eso.

Lo que hago es leer los datos entrantes desde el puerto serie, luego enviar estos datos a una página web usando websocket. Desde aquí todo funciona bien.

yo suelonodo-estático para servir mi página webyo suelows para websocket

El problema es cuando un cliente cierra su navegador, entonces mi servidor NodeJS websocket se bloquea con el siguiente error:

root@WS-SERVER-2:~/app# node socketserver.js
open serial communication
Client disconnected.

/root/node-v0.10.29/lib/node_modules/ws/lib/WebSocket.js:187
    else throw new Error('not opened');
               ^
Error: not opened
    at WebSocket.send (/root/node-v0.10.29/lib/node_modules/ws/lib/WebSocket.js:187:16)
    at sendAll (/root/app/socketserver.js:30:16)
    at SerialPort.<anonymous> (/root/app/socketserver.js:58:8)
    at SerialPort.emit (events.js:95:17)
    at Object.module.exports.raw [as parser] (/root/node-v0.10.29/bin/node_modules/serialport/parsers.js:8:13)
    at Object.SerialPort.options.dataCallback (/root/node-v0.10.29/bin/node_modules/serialport/serialport.js:143:15)
    at SerialPortFactory.SerialPort._emitData (/root/node-v0.10.29/bin/node_modules/serialport/serialport.js:312:20)
    at afterRead (/root/node-v0.10.29/bin/node_modules/serialport/serialport.js:290:18)
    at /root/node-v0.10.29/bin/node_modules/serialport/serialport.js:304:9
    at Object.wrapper [as oncomplete] (fs.js:459:17)

Aquí está mi código websocket / serialport:

var WebSocketServer = require('../node-v0.10.29/lib/node_modules/ws').Server;
var SerialPort = require('../node-v0.10.29/bin/node_modules/serialport').SerialPort;

var serialPort;
var portName = '/dev/ttyACM0';
var sendData = "";
var wss = new WebSocketServer({port: 8080});

var CLIENTS=[];

wss.on('connection', function(ws) {
       CLIENTS.push(ws);
    ws.on('message', function(message) {
        console.log('received: %s', message);
        sendAll(message);
    });
    ws.on('close', function() {
        console.log('Client disconnected.');
    });
    ws.on('error', function() {
        console.log('ERROR');
    });
    ws.send("");
});

function sendAll(message)
{
for(var i=0;i<CLIENTS.length;i++)
    {
    CLIENTS[i].send(message);
    }
}

serialListener();

function serialListener(debug)
{
    var receivedData = "";
    serialPort = new SerialPort(portName, {
        baudrate: 9600,
         dataBits: 8,
         parity: 'none',
         stopBits: 1,
         flowControl: false
    });

    serialPort.on("open", function () {
      console.log('open serial communication');
            // Listens to incoming data
        serialPort.on('data', function(data) {
             receivedData += data.toString();
          if (receivedData .indexOf('E') >= 0 && receivedData .indexOf('B') >= 0) {
           sendData = receivedData .substring(receivedData .indexOf('B') + 1, receivedData .indexOf('E'));
           receivedData = '';
         }
         // send the incoming data to browser with websockets.
       sendAll(sendData);
      });
    });
}

¿Alguien puede ayudarme a descubrir qué pasa aquí?

Respuestas a la pregunta(3)

Su respuesta a la pregunta