Чи існує існуючий інструмент, який можна використовувати для завантаження великих файлів через погане з'єднання?
Мені доводиться регулярно завантажувати відносно невеликий файл: 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
також дозволяє автоматично перезапустити передачі.