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

问题描述 投票:0回答:0

我正在用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);
            })
        }

在receever端我要把传入的文件(流)转换为Blob,但是网上有人说,如果文件的大小太大,会有反压的问题。我应该怎么写文件下载代码,避免背压,才不会让收件人那边因为缓冲区溢出而崩溃?还是应该有其他的方法来下载文件?

node.js webrtc file-sharing nodejs-stream backpressure
1
投票

你想听 缓冲数量低 设定后 缓冲金额低阈值

你会希望把所有的逻辑都放在发送方,接收方没有任何控制权。我想MDN是你最好的资源,我没有找到任何好的单篇文章。

我在Pion有一个例子 此处 但那是在Go中。虽然概念相同,所以希望对大家有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.