提问人:Billy Bishop 提问时间:1/23/2023 最后编辑:Billy Bishop 更新时间:1/23/2023 访问量:64
节点 - 管道远程 http 大型视频文件流比直接提供远程文件 url 慢
Node - Piping remote http large video file stream is slower than serving remote file url directly
问:
我有一个简单的节点服务器,我想用它来充当代理,从外部服务器(例如谷歌驱动器、Dropbox 等)流式传输大型视频文件,其设置如下:
var http = require("http");
var request = require("request");
var hostname = "localhost";
var port = 3000;
var decode = (encodedString) =>
Buffer.from(encodedString, "base64").toString("ascii");
var server = http.createServer((req, res) => {
var rid = parseInt(Math.random() * 10000);
var url = new URL(`http://${hostname}:${port}${req.url}`);
if (url.pathname == "/download" && url.searchParams.get("file")) {
var remoteFileUrl = decode(url.searchParams.get("file"));
var headers = {};
if (req.headers.range) headers.range = req.headers.range;
var fileReq = request(remoteFileUrl, { headers });
fileReq.pipe(res).on("close", () => {
fileReq.destroy();
});
} else {
res.statusCode = 200;
res.setHeader("Content-Type", "text/plain");
res.end(":)\n");
}
});
server.listen(port, "0.0.0.0", () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
现在,我在自己的私有VPS上运行了这个节点应用程序,该VPS具有约5000 mbits / s的高网络速度和3GB RAM,但是当我尝试在VLC等媒体播放器上通过url(http://my-vps-ip/download?file=remoteFileUrlEncodedInBase64)播放此视频文件时,与直接从源服务器播放远程文件相比,它滞后了。
我还测试了节点服务器是否能够通过从另一个单独的 VPS(不同的云)下载文件来提供文件的全部带宽,并且它能够以最快的速度从我的服务器下载文件。
对于我尝试流式传输低于 40GB 的任何文件,似乎没有延迟,但对于大于 60GB 的文件,缓冲是存在的,而直接从远程源服务器播放文件时则没有缓冲
我能做些什么来提高这里的性能吗?或者为什么我通过服务器提供流可能没有响应?
答: 暂无答案
评论