Существует ли существующий инструмент, который можно использовать для загрузки больших файлов через плохое соединение?
Я должен регулярно загружать относительно небольшой файл: 300 МБ, но медленное (80-120 КБайт / с) TCP-соединение случайно разрывается через 10-120 секунд. (Это сеть большой компании. Мы связывались с их администраторами (работающими из Индии) несколько раз, но они не могут или не хотят ничего делать.) Проблема может быть в их обратных прокси / балансировщиках нагрузки.
До сих пор я использовал модифицированную версию pcurl: https://github.com/brunoborges/pcurl
Я изменил эту строку:
curl -s --range ${START_SEG}-${END_SEG} -o ${FILENAME}.part${i} ${URL} &
к этому:
curl -s --retry 9999 --retry-delay 3 --speed-limit 2048 --speed-time 10 \
--retry-max-time 0 -C - --range ${START_SEG}-${END_SEG} -o ${FILENAME}.part${i} ${URL} &
Мне пришлось добавить, --speed-limit 2048 --speed-time 10
потому что соединение в основном просто зависает в течение нескольких минут, когда оно не удается.
Но в последнее время даже этот сценарий не может завершить.
Одна проблема заключается в том, что она, кажется, игнорирует -C -
часть, поэтому она не «продолжает» сегмент после повторной попытки. Кажется, он усекает соответствующий временный файл и запускается с начала после каждого сбоя. (Я думаю, что --range
и -C
параметры нельзя использовать вместе.)
Другая проблема заключается в том, что этот скрипт загружает все сегменты одновременно. Он не может иметь 300 сегментов, из которых только 10 загружаются одновременно.
Я думал о том, чтобы написать инструмент для загрузки в C # для этой конкретной цели, но если есть существующий инструмент или если команда curl могла бы работать должным образом с другими параметрами, то я мог бы сэкономить некоторое время.
ОБНОВЛЕНИЕ 1: Дополнительная информация: Функцию параллельной загрузки не следует удалять, поскольку они имеют ограничение полосы пропускания (80–120 Кбайт / с, в основном 80) на соединение, поэтому 10 соединений могут вызвать ускорение в 10 раз. Я должен закончить загрузку файла через 1 час, потому что файл генерируется каждый час.
rsync
(что позволит вам перезапустить переводы)?lftp
также позволяет автоматически перезапускать передачи.