【问题标题】:Stream.pipe event 'end' triggers only once on Nodejs socket.io-streamStream.pipe 事件“结束”仅在 Nodejs socket.io-stream 上触发一次
【发布时间】:2017-04-19 01:06:48
【问题描述】:

我有一个使用 nodejs 设置的服务器和一个客户端。服务器正在使用 socket.io-stream 向客户端发送文件。传输文件后,我想开始在客户端使用它。为此,我正在听流的“结束”事件。 我的代码有效,但只有一次。在我发送的第一个文件上触发了事件,但在下一个文件上没有。在第一个文件之后,下一个文件已损坏并且为 0 字节。

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
    });

});

我尝试使用'end' 和'finish' 事件,将autoClose 设置为true 和false,使用stream.close() 和stream.end(),但没有任何效果。对我来说,就像有些东西没有正确重置。

【问题讨论】:

    标签: node.js sockets socket.io stream


    【解决方案1】:

    在你的 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);
        });
    
    });
    

    【讨论】:

    • 感谢您的回答,但我得到了相同的行为。
    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 2023-03-21
    • 2020-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-04
    • 2021-01-13
    相关资源
    最近更新 更多