【问题标题】:Node.js: appending to readable stream WHILE it is piped to a writable stream?Node.js:附加到可读流同时通过管道传输到可写流?
【发布时间】:2021-04-24 17:23:38
【问题描述】:

我的服务器接收到音频缓冲区的 udp 数据包。 我想将这些传入的块流式传输到 Google 的文本转语音 API。

使用 fs 流,是否有可能以类似的方式实现这一点?:

let stream = fs.createReadStream("empty-file-name").pipe(myOutputStreamToAPI);

dgramserver.on('message', (msg, rinfo) => {
        stream.push(msg)
}

在这个粗略的草图中,我会创建一个空的(可能的?)流,或者在收到第一个数据包时创建流,并随着更多数据包的进入继续推送到流。

这可能吗?

还有什么方法可以实现我想要的结果?也就是说,在将可读流通过管道传输到可写流之后,我希望在不同时间动态添加到可读流中。

这个问题也可以这样问: 如何从动态传入的 udp 数据包中创建可读流?

谢谢

【问题讨论】:

    标签: node.js pipe fs nodejs-stream nodejs-server


    【解决方案1】:

    这会给你答案吗

    const Stream = require('stream')
    
    const readableStream = new Stream.Readable()
    const writableStream = new Stream.Writable()
    
    writableStream._write = (chunk, encoding, next) => {
        console.log(chunk.toString())
        next()
    }
    
    readableStream.pipe(writableStream)
    
    readableStream.push('ping!')
    readableStream.push('pong!')
    
    writableStream.end()
    

    【讨论】:

    • 感谢您的回复。这看起来正是我需要的。不过有两件事:1. 除非我在“ping”之后将空值推送到 readableStream,否则我会收到“可读._read 未实现错误”,知道在方法主体中要实现什么? 2.你能解释一下_write方法以及你为什么要实现它吗?当我将可写流更改为 process.stdout 时,您的代码有效,因此它可能会满足我的需要,但您能向我解释您的意图吗?谢谢
    • 首先,您需要在告诉源结束的末尾推送(null)。对于第二个 _write 函数,应用程序代码不得直接调用。它应该由子类实现,并且只能由内部 Writable 类方法调用。例如:_write(chunk, encoding, callback) { fs.write(this.fd, chunk, callback);资源:nodejs.org/api/…nodejs.org/api/stream.html#stream_readable_push_chunk_encoding
    猜你喜欢
    • 2018-06-04
    • 2021-03-03
    • 2018-03-12
    • 2023-03-24
    • 1970-01-01
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    • 2013-07-23
    相关资源
    最近更新 更多