如何在使用流通过 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 中。同样的概念,但希望对您有所帮助!
我正在使用 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 中。同样的概念,但希望对您有所帮助!