如何在使用流通过 WebRTC 数据通道发送文件时下载传入文件并防止背压?

How to download incoming file and prevent Backpressure while sending files through WebRTC data channels using streams?

我正在使用 WebRTC 和 Node.js 构建一个文件共享应用程序。这是一个命令行应用程序,因此不会有 HTML 涉及。我将文件作为流读取并发送,然后在接收方下载文件。以下是我将如何编写发件人的代码:

        // code taken from https://github.com/coding-with-chaim/file-transfer- 
        // final/blob/master/client/src/routes/Room.js

        const reader = stream.getReader();

        reader.read().then(obj => {
            handlereading(obj.done, obj.value);
        });

        // recursive function for sending out chunks of stream
        function handlereading(done, value) {
            if (done) {
                peer.write(JSON.stringify({ done: true, fileName: file.name }));
                return;
            }

            peer.write(value);
            reader.read().then(obj => {
                handlereading(obj.done, obj.value);
            })
        }

在接收方这边,我会将传入的文件(流)转换为 Blob,但网上有人说如果文件太大会出现背压问题。我应该如何编写文件下载代码以避免背压,以免由于缓冲区溢出而使接收方崩溃?还是应该有另一种方法来下载文件?

您想听onbufferedamountlow after setting bufferedAmountLowThreshold

您将希望将所有逻辑放在发送方,接收方没有任何控制权。我认为 MDN 是您最好的资源,我没有找到任何关于此的好文章。

我在 Pion 中有一个例子 here 但那是在 Go 中。同样的概念,但希望对您有所帮助!