通过Node.js流管道传输/抽取的数据顺序

问题描述

我正在尝试编写一个nodejs代码,该代码读取(音频)文件并将内容流式传输到远程服务(对话框)。我在确保发送到流的块的顺序方面遇到麻烦。 在大多数情况下,一切似乎都以正确的顺序进行,但有时,数据似乎是以乱序方式发送的。

伪代码:

for (var i = 0; i < numFiles; ++i) {
  await sendData(fs.createReadStream(filenames[i]),i);
}

...

async function sendData(inputDataStream,chunkIndex) {
  await inputDataStream
    .pipe(new Transform({
      objectMode: true,transform: (obj,_,next) => {
        console.log('Sending chunk ' + chunkIndex);
        next(null,<some data>);                        
      }
    }),{end: false})
  .pipe(outputStream,{end: false});
}

我看到有时候“发送块...”的打印顺序不正确。

问:有什么办法可以避免这个问题?

另一个问题是,尽管在大多数情况下,每个块都是连续发送的,但有时,一些块将被拆分并以较小的子块发送(即使每个文件都不大)。 [我在同一组文件上重复了多次实验]

问:有什么方法可以控制块大小? (我在这里做错了什么?)

问:这是因为远程服务无法处理传输速率吗?如果是这样,我应该如何应对呢?

[我也尝试过使用pump(),但仍然观察到相同的行为] 预先感谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)