Estou usando a biblioteca socket.io-stream para transferir arquivos entre servidores de 2 nós.
Servidor A: (Enviar Arquivo)
```
var clientIO = require('socket.io-client');
var ss = require('socket.io-stream');
var clientSocket= clientIO( http://ServerB_Address
);
clientSocket.on('erro', (erro) => {
console.log(erro);
});
var stream = ss.createStream({objectMode: true});
ss(clientSocket).emit('send-file', stream, data);
var carregadoBytes = 0;
var de = 0;
var leitor = fs.createReadStream(filePath, {start: from});
leitor.pipe(stream)
.on('erro', (erro) => {
console.log(erro);
})
.on('dados', (pedaço) => {
uploadedBytes += Buffer.byteLength(chunk);
});
Server B: (Receive File)
```
var fs = require('fs');
var io = require('socket.io')(http);
var ss = require('socket.io-stream');
io.on('connection', (socket) => {
// listen to send file
ss(socket).on('send-mail', (stream, data) => {
console.log(`*** Begin receive file`);
var writer = fs.createWriteStream(downloadPath, {flags: 'a'});
stream.pipe(writer);
var size = 0;
stream.on('data', (chunk) => {
size += chunk.length;
console.log(`*** Receive ${size} from mail`);
});
stream.on('end', () => {
console.log(`*** End file`);
});
stream.on('error', (error) => {
console.log(`*** Error when receiving file`);
console.log(error);
});
});
});
Funciona bem, mas ao transferir o arquivo se o segundo servidor do nó for interrompido, o aplicativo no outro servidor travou e um evento de erro não tratado foi gerado
Por favor, alguém pode me dizer como posso pegar esse erro? E se houver uma maneira melhor de transferir arquivos entre servidores de nós?
Use um ouvinte de eventos para o evento "erro". Ou use uma biblioteca de emissor de evento puro
Como usar o ouvinte de eventos para o erro? Por favor me dê um exemplo, pois registro erro no socket do cliente.
Não use socket.io ..., você economizará tempo a longo prazo, basta olhar para os mais de 300 problemas abertos sem respostas ...
O último commit significativo foi há 6 meses...
Comentários muito úteis
Não use socket.io ..., você economizará tempo a longo prazo, basta olhar para os mais de 300 problemas abertos sem respostas ...
O último commit significativo foi há 6 meses...