Как изменить атрибут шкипера maxTimeToBuffer
Я использую Skipper и Skipper-Azure для загрузки нескольких файлов одновременно, если я загружаю небольшое количество файлов, скажем, 20-30 за раз, все работает нормально, но если я загружаю больше файлов, например 200 или 300, я получаю следующее ошибка для некоторых файлов, т.е. только для двух или трех файлов, а не для всех файлов.
Тайм-аут восходящего потока перед подключением к приемнику
В файле sails>node_modules>Skipper>Standalone>Upstream>Upstream.js есть атрибут maxTimeToBuffer
и его значение по умолчанию 4500
когда я изменю это на 10000
мой код работает нормально, я проверил его более 100 раз.
Мои вопросы
- Каково влияние этого изменения?
- Есть ли место, где я могу переопределить эту конфигурацию вместо изменения ее основного файла, я не хочу, чтобы эта конфигурация исчезала при каждом обновлении.
Спасибо, ребята, за любую помощь заранее
2 ответа
В sails.js v0.12 свойство maxTimeToBuffer является настраиваемым свойством, которое можно добавить в файл config/http.js, чтобы перезаписать значение по умолчанию, равное 4500 мс, т. Е. Максимальное количество миллисекунд, в течение которых можно ожидать подключения любого заданного живого восходящего потока. получателю после того, как он начнет получать входящий файл.
Чтобы использовать настраиваемые свойства, сначала необходимо раскомментировать прямой вызов, чтобы потребовать шкипера.
// bodyParser: require('skipper')({strict: true})
Что касается влияния этого изменения, это разъясняется в официальной документации паруса:
Максимальное количество миллисекунд, в течение которых можно ожидать подключения любого живого восходящего потока к получателю после того, как он начнет получать входящую загрузку файла. Skipper приостанавливает восходящие потоки, чтобы разрешить выполнение пользовательского кода в политиках вашего приложения и действиях контроллера (например, поиск в базе данных) перед тем, как вы "подключите" входящие загрузки файлов (например, req.file('avatar'). Upload(...)) в желаемую цель загрузки (локальный диск, S3, gridfs и т. д.). Входящие байты управляются с использованием комбинации буферизации и обратного давления TCP, встроенных в потоки Node.js. Максимальное время буферизации - это настраиваемый уровень защиты для защиты от атак типа "отказ в обслуживании", которые пытаются заполнить серверы ожидающими загрузками файлов. Если превышено время ожидания, сработает ошибка EMAXBUFFER. Лучшая защита от этих типов атак заключается в том, чтобы подключать загружаемые файлы к получателям как можно раньше в верхней части действий вашего контроллера.
У меня была такая же проблема... Вы должны изменить файл http.js, расположенный в папке config... вы должны сделать что-то вроде этого:
passportInit: require('passport').initialize(),
passportSession: require('passport').session(),
bodyParser: (function _configureBodyParser(){
var skipper = require('skipper');
var middlewareFn = skipper({
strict: true,
maxTimeToBuffer: 100000,
});
return middlewareFn;
})(),
order: [
'cookieParser',
'session',
'passportInit',
'passportSession',
'bodyParser',
'compress',
'poweredBy',
'$custom',
'router',
'www',
'favicon',
]
}