2016-12-04 35 views
0

我有一個服務器和一個客戶端用nodejs設置。服務器使用socket.io-stream將文件發送到客戶端。當文件被傳輸時,我想在客戶端開始使用它。爲此,我正在聆聽流的「結束」事件。 我的代碼有效,但只有一次。在我發送的第一個文件中,事件被觸發,但不在下一個文件中。在第一個文件後,下一個文件被破壞並且是0字節。Stream.pipe事件'結束'在Nodejs上只觸發一次socket.io-stream

server.js

socketObj.emit('order', orderData); 

ss(socketObj).on('file', function(stream) { 
      fs.createReadStream('./uploads/'+ orderData.file.name +'').pipe(stream); 
}); 

client.js

socket.on('order', function(data) { 

    var stream = ss.createStream(); 

    ss(socket).emit('file', stream); 

    stream.pipe(fs.createWriteStream(data.file.name)); 

    stream.on('end', function(){ 
     doSomeStuff(data); //This function is called only once 
    }); 

}); 

我一直在使用 '端' 和 '結束' 事件,設定自動關閉的真假嘗試,使用stream.close( )和stream.end(),但沒有任何工作。對我來說就像某些東西沒有正確重置。

回答

0

在client.js文件試試這個:

socket.on('order', function(data) { 

    var stream = ss.createStream(); 
    var writeStream = fs.createWriteStream(data.file.name); 

    ss(socket).emit('file', stream); 

    stream.pipe(writeStream); 

    writeStream.on('close', function(){ 
     doSomeStuff(data); 
    }); 

}); 
+0

感謝您的回答,但我得到了相同的行爲。 – Domingo