如何解决Node.js自定义代理/缓存-通过可写流中的可读流提供文件服务
我正在尝试在nodejs中进行简单的自定义HTTP代理/缓存。 这是我的测试代码:
app.get('/bbb_sunflower_1080p_60fps_stereo_abl.mp4',async function (req,res) {
var filePath = __dirname+"/cache/bbb_sunflower_1080p_60fps_stereo_abl.mp4"
if (await fse.pathExists(filePath) == true)
{
console.log("Cache file exist")
var readStreamFromFile = fs.createReadStream(filePath)
readStreamFromFile.pipe(res)
}
else
{
console.log("Cache file doesn't exist")
axios({
method: 'get',url: "http://ftp.vim.org/ftp/ftp/pub/graphics/blender/demo/movies/BBB/bbb_sunflower_1080p_60fps_stereo_abl.mp4",responseType: 'stream',}).then(function (response) {
var writeStreamToFile = fs.createWriteStream("cache/bbb_sunflower_1080p_60fps_stereo_abl.mp4")
var readStreamFromremote = response.data
readStreamFromremote.pipe(writeStreamToFile)
readStreamFromremote.pipe(res)
})
}
})
当用户访问/bbb_sunflower_1080p_60fps_stereo_abl.mp4时:
这实际上效果很好,但是问题是当2个不同的用户同时调用/bbb_sunflower_1080p_60fps_stereo_abl.mp4时。当前将从writeStreamToFile写入缓存文件时,用户将从readStreamFromFile的缓存中获取文件。
如果readStreamFromFile的速度比writeStreamToFile快,则readStreamFromFile将终止,因为它认为当前文件正在增长,而它已经传输了整个文件。
我该如何强制readStreamFromFile与writeStreamToFile完美同步,并且在文件实际完成之前不结束?
谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。