我可以这样创建一个新的双工流
const Duplex = require('stream').Duplex;
let myStream = new Duplex()
通过Websocket接收到数据块/缓冲区,每当通过Websocket接收到新的数据块时,我会像这样将其添加到流中:
myStream.push(buffer)
然后我将流传输到另一个进程(在此示例中为ffmpeg)
myStream.pipe(process.stdout);
这导致了错误NodeError: The _read() method is not implemented
,我能理解这个错误,但我不理解为什么要实现它以及如何实现它。我还看到在Duplex类构造函数中可以传递读取函数,但这是为什么呢?我只想不断地向流中推送数据块,然后将其传输到另一个进程。
push
。当你不断地向一个可读流写入(push)数据时,那感觉就像是一个可读+可写流。那和双工流(Duplex)有什么区别呢?我不确定为什么我所拥有的示例代码使用了Duplex流,但它只是将流传输到sox,然后再传输到ffmpeg
,但如果我使用一个像你描述的可读流,那应该也能正常工作。 - curiousMind.pipe
从中读取,但它不是可写的,因为我自己定义了如何填充读缓冲区(通过readable.push)?我的困惑在于命名,因为我最初认为“读取”函数读取进入流中的数据 - 这不是情况,因为当有人想要从中获取数据时,它是被调用的函数。但是以某种方式,我的可读流又有点“可写”,因为我可以从外部执行自定义的push
,对吧?我向流中写入了一些东西 - 这让我感到困惑! - curiousMind