file-upload - 使用节点中的大型媒体文件一次发出多个发布请求时的内存问题
问题描述
我正在尝试使用request
和上传大型媒体文件bluebird
。这是我的代码
const options = {
url: 'someuploadurl',
method: 'POST',
json: true,
headers: {
Authorization: 'Bearer access_token',
'Content-Type': 'multipart/form-data'
},
formData: {
file: {
value: mediaData,
options: { filename: 'myMedia.mp4', contentType: 'video/mp4'}
}
}
}
const uploadFunction = (options) => {
new Promise((resolve, reject) => {
request(options, (error, response, body) => {
if(error){
reject(error)
}
resolve(body)
})
}).then(console.log).catch(console.log)
}
const sendMultipleRequests = () => {
const totalRequests = [1, 2, 3, 4, 5, 6, 7, 8]
// make 8 requests at once
blueBird.map(totalRequests, () => {
uploadFunction(options)
})
}
此代码在totalRequests.length
3 或更少时有效。当所有媒体文件都很小(< 2-3mb)但当媒体文件很大(> 30mb)时,代码也可以工作,它会破坏代码并给出错误Socket hang up
。
我看到了我的系统的内存使用情况,随着请求的增加内存使用量的增加,该进程占用了整个 RAM 内存,然后代码崩溃并出现错误。
请指导我使此代码正常工作,或者您可以共享任何其他方式来上传适用于该场景的媒体。
解决方案
您需要根据正在运行的系统可以处理的数量来限制并发请求的数量。
blueBird.map(totalRequests, () => uploadFunction(options), { concurrency: 3 })
推荐阅读
- c++ - 如何将 Sublime Text 中的错误消息重定向到文件
- python - 如何将列表作为参数传递给函数
- python - 滑动窗口问题中执行的时间限制
- mysql - 连接被拒绝:没有更多信息
- linux - 错误:无法执行 HTTP 请求:spa6k12345.amazonaws.com:名称或服务未知
- javascript - 如何修复正则表达式未终止的正则表达式文字
- javascript - 我开发了一个教程应用程序,并按照指南将其托管在 gh-pages 上。为什么现在路由乱了?
- powershell - 数据采用数组格式;从文件 1 中删除 Powershell 中文件 2 中存在的行
- inno-setup - 如何在 inno-setup 中调用带有指针参数的函数
- python - 如何处理异步函数之外的“等待”?