重新连接

时间:2016-12-15 18:44:00

标签: node.js sockets client-server

我是nodejs的新手,我有一些客户端 - 服务器实现,它基本上按以下方式工作:我提交一个将数据抛出到客户端远程服务器的表单。后者向我发回一些新数据。

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)崩溃。有人可以帮忙吗?

1 个答案:

答案 0 :(得分: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);
};