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);
});
});
고마워요! 그런 다음 수신 된 데이터를 삭제해야합니까? – liuyanghejerry
@liuyanghejerry 전적으로 당신이하는 일에 달려 있습니다. – EJP
Err ... 그게 너무 나쁘다 ... – liuyanghejerry