2013-02-20 2 views
2

Node.js를 사용하여 한 클라이언트에서 다른 클라이언트로 데이터를 전송하는 pub/sub 모델이 있습니다. 게다가 서버는받은 모든 것을 기록하고 새로운 클라이언트에게 보냅니다.Node.js에서 'ETIMEDOUT 읽기'를 다루는 방법은 무엇입니까?

그러나, 전송 일부 데이터가 손상, 나는 같은 오류가 발생했습니다 : 내가 제대로 이러한 오류를 처리하는 방법을 모르는

Error with socket! 
{ [Error: write EPIPE] code: 'EPIPE', errno: 'EPIPE', syscall: 'write' } 
Error with socket! 
{ [Error: read ETIMEDOUT] code: 'ETIMEDOUT', errno: 'ETIMEDOUT', syscall: 'read' } 

. 클라이언트가 고장난 것 같습니다.

서버는 서버와 같은 프록시이므로 실제로 어떤 데이터가 의미하는지 알지 못합니다. 이러한 오류가 발생하기 전에 모든 데이터 팩의 유효성을 검사하는 방법을 모릅니다. 연결이 삭제되었습니다 당신이 EPIPE 또는 실제로 쓰는 어떤 오류가 발생하는 경우

// server is an object inheriting from net.Server 
server.on('listening', function() { 
    var port = server.address().port; 
}).on('connection', function(cli) { 
    cli.socketBuf = new Buffers(); 
    cli.commandStarted = false; 
    cli.dataSize = 0; 
    cli.setKeepAlive(true, 10*1000); 
    cli.setNoDelay(true); 
    cli.on('connect', function() { 
     server.clients.push(cli); 
    }).on('close', function() { 
     var index = server.clients.indexOf(cli); 
     server.clients.splice(index, 1); 
    }).on('data', function (buf) { 
     server.emit('data', cli, buf); 
     if(op.autoBroadcast) { 
      _.each(server.clients, function(c) { 
       if(c != cli) c.write(buf); 
      }); 
     } 
    }).on('error', function(err) { 
     console.log('Error with socket!'); 
     console.log(err); 
    }); 
}).on('error', function(err) { 
    console.log('Error with server!'); 
    console.log(err); 
}); 

// ... 

// room.dataSocket is an instance of server beyond 
room.dataSocket.on('data', function(cli, d) { 
    // bf is a buffered file 
    bf.append(d); 
    room.dataFileSize += d.length; 

}).on('connection', function(con){ 
    bf.readAll(function(da) { 
     con.write(da); 
    }); 
}); 

답변

2

, 피어 닫거나했습니다

여기 내 코드입니다. 따라서 그 지점에서 연결을 닫아야합니다.

읽기 시간 초과가 발생하면 비현실적으로 짧은 시간 초과를 설정했거나 피어가 제 시간에 전달하지 못한 것입니다. 두 번째 경우에는 다시 한 번 연결이 종료되었다고 가정하고 닫아야합니다 .

+0

고마워요! 그런 다음 수신 된 데이터를 삭제해야합니까? – liuyanghejerry

+0

@liuyanghejerry 전적으로 당신이하는 일에 달려 있습니다. – EJP

+0

Err ... 그게 너무 나쁘다 ... – liuyanghejerry

관련 문제