问题描述
我正在尝试在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 (将#修改为@)