проблема с памятью при одновременном выполнении нескольких пост-запросов с большим медиа-файлом в узле - PullRequest
0 голосов
/ 13 июня 2018

Я пытаюсь загрузить большой медиа-файл с 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-3 МБ), но когда мультимедийные файлы имеют большой размер (> 30 МБ), он ломается, код выдает ошибку Socket hang up.

Я видел использование памяти моей системой, так как запрос увеличивает использование памяти, увеличивается, процесс занимает всю оперативную память, а затем происходит сбой кода с ошибкой.

Пожалуйста, дайте мне знать, как заставить этот код работать, или вы можете поделиться любым другим способом загрузки мультимедиа, которое будет работать в этом сценарии.

1 Ответ

0 голосов
/ 13 июня 2018

Вам необходимо ограничить количество одновременных запросов в зависимости от того, сколько может обрабатывать работающая система.

blueBird.map(totalRequests, () => uploadFunction(options), { concurrency: 3 })
...