#node.js #amazon-s3 #ceph
#node.js #amazon-s3 #ceph
Вопрос:
Я использую aws-sdk
модуль в моем node
приложении,
в частности S3
библиотеку, для записи в ceph
кластер.
Приложение периодически загружает файлы фиксированного размера.
Ceph иногда выполняет сегментирование, что приводит к зависанию http-запроса на загрузку на 500 секунд.
Как я могу отменить эти запросы для сегментов, выполняющих сегментирование?
Как я могу установить тайм-аут, скажем, на 2 секунды, для всех загрузок?
Комментарии:
1. вы хотите установить его в своем кластере ceph или в вашем клиенте aws sdk?
2. Я предпочитаю aws sdk client, поскольку у меня нет полного контроля над кластером
3. @natdev можете ли вы поделиться тем, как вы подключаетесь к Ceph с помощью AWS S3?
Ответ №1:
После долгих поисков в Интернете я нашел эту функцию прерывания.
Итак, если это кому-нибудь поможет, вот как я это реализовал:
const upload = (bucket, key, body, timeout = 2000) => {
const request = this.s3.upload({Bucket: bucket, Key: key, Body: body})
setTimeout(request.abort.bind(request), timeout)
return request.promise()
}
Если timeout
передано, то Error
выдается RequestAbortedError
код.
Ответ №2:
Вы можете использовать timeout
в httpOptions
. example:
var s3 = new AWS.S3({apiVersion: '2006-03-01', httpOptions: {timeout: 2000}});
Комментарии:
1. Я сделал это, это не сработало … как задокументировано, в нем указано, что оно закрывает
idle
соединение при отсутствии трафика, но, как выясняется, клиент не закрывает соединение после ожидания ответа2. @natdev Возможно, происходит передача фрагмента. Если вы хотите установить тайм-аут для всего запроса, я думаю, вам следует реализовать это с помощью node js, а в aws sdk такой опции нет.
3. Я нашел способ сделать это, проверьте мой ответ