В моем приложении должен быть компонент для загрузки файлов, который будет загружать очень большие (> 1 ГБ) файлы. Я еще не определился с протоколом (HTTP или FTP) (любая помощь в этом отношении будет принята с благодарностью). Теперь, когда один пользователь использует эту функцию загрузки, работа другого пользователя не должна быть затруднена, т.е. загрузка одного большого файла не должна поглощать пропускную способность другого пользователя.
Можно ли каким-либо образом ограничить этот процесс загрузки в н / б, чтобы я мог выделить ему только такое количество ч / б, которое продолжит процесс загрузки, и работа других пользователей также не будет затруднена? Какой протокол будет лучшим для этого типа загрузки больших файлов (HTTP или FTP) с точки зрения н / б? FTP и SFTP - одно и то же, или SFTP имеет больше накладных расходов и, следовательно, имеет более низкую скорость передачи данных?
Если вам нужно ограничить свое собственное приложение, я бы посоветовал вам включить поддержку ограничения скорости передачи данных в самом приложении, хотя, если вы используете стороннюю библиотеку для отправки, это может быть невозможно.
Вы ничего не заявляете о своей платформе и предполагаемой среде установки, что затрудняет конкретные рекомендации, но libcurl (http://curl.haxx.se/), как правило, является популярным выбором и поддерживает практически все протоколы для прямой передачи данных от точки к точке, имеет параметры ограничения скорости и доступен для большинства платформ, включая Linux, BSD, MacOS и Windows. Лицензия - это та, которая позволяет связывать ее и с приложениями, отличными от F / OSS, если это проблема для вас, и если вы не можете найти прямые привязки для выбранного вами языка, вы всегда можете вызвать его через внешний curl
утилита.
Если вы застряли при использовании библиотеки или внешней программы, которая не поддерживает ограничение скорости, и вы используете Linux (или другую unix-подобную среду), вы можете изучить trickle (посмотреть здесь) или формирование трафика, встроенное в современные ядра (для этого существует множество руководств, этот это тот, который пришел на вершину быстрого Google). Использование такого формирования трафика позволит вам контролировать всю исходящую полосу пропускания, а не только одно приложение, поэтому вы можете остановить любой поток (или комбинацию потоков), потребляющий всю пропускную способность восходящего потока вашей сети, без изменения отдельных приложений.
Вы можете регулировать пропускную способность на уровне приложения, если используемое вами приложение поддерживает это. Например, curl принимает параметр --limit-rate, который вы можете указать.
Вы можете регулировать полосу пропускания в самой сети, используя качество обслуживания (QoS). Это немного сложнее - хорошее вступление Вот.
Если безопасность не важна, предпочтите ftp над sftp, чтобы избежать чрезмерного шифрования. Я не думаю, что вы беспокоитесь о файлах размером до 1 ГБ, поскольку пользователи обычно не обнюхивают такие большие файлы. Так что ftp в порядке.