2016-12-15 2 views
0

Я очень новичок в nodejs, и у меня есть реализация клиент-сервер, которая в основном работает следующим образом: я отправляю форму, которая выдает данные на удаленный сервер клиента. Последние присылают мне новые данные.Проблема с сервером nodejs node при повторном подключении

net.createServer(function (socket) { 

     socket.on('error',function(err){ console.error(err)}); 

     socket.on('data', function (data) { 
      some_method(data) 
     }); 
     socket.on('end', function() { 
     console.log('CONN: disconnected'); 
     //socket.end(); 
    }); 

    app.post('/api/sender', function(req, res) { 
      socket.write(some_input); 
      res.end(); 
     }); 
    }).listen(9000); 

Это хорошо работает до тех пор, пока клиент не отключится и воссоединяется, то я получаю следующее сообщение об ошибке:

{ [Error: This socket has been ended by the other party] code: 'EPIPE' } 

И код аварий на этой линии socket.write(some_input). Может кто-то может помочь?

ответ

0

вот как это можно решить:

module.exports = function(app) { 
    var clients = {}; 

var server = net.createServer(function (socket) { 

    server.getConnections(function(err, count) { 
      var id = sha1(socket.remoteAddress); 
      clients[id] = { 
       stream: through(), 
       socket: socket, 
      } 
      clients[id].stream.pipe(socket); 
     }); 
     socket.on('error',function(err){ console.error(err)}); 

     socket.on('data', function (data) { 
      some_method(data) 
     }); 
     socket.on('end', function() { 
     console.log('CONN: disconnected'); 
     socket.end(); 
    }); 

    app.post('/api/sender', function(req, res) { 
    // here id is the IP adress got from req 
     if (clients[id]) { 
      clients[id].stream.write(input); 
     } 
      res.end(); 
     }); 
    }).listen(9000); 
}; 
Смежные вопросы