Моя еще не выпущена Приложение Delphi 2010 позволяет пользователям загружать свои файлы на мои серверы.Прямо сейчас я использую HTTPS POST для отправки файлов, (упрощенный) алгоритм в основном:
- Разделить файл на «кусочки» (256 КБ каждый)
- Для каждого среза,Отправьте его на сервер
т.е.для файла размером 1 МБ:
--> Get Slice #1 (256KB)
--> Upload Slice #1 using TidHTTP.Post()
--> Get Slice #2 (256KB)
--> Upload Slice #2 using TidHTTP.Post()
--> Get Slice #3 (256KB)
--> Upload Slice #3 using TidHTTP.Post()
--> Get Slice #4 (256KB)
--> Upload Slice #4 using TidHTTP.Post()
Я использую Indy 10 .Я (ab) использовал свой профилировщик снова и снова, и не осталось ничего для оптимизации, кроме изменения самой процедуры загрузки.
Я также использую многопоточность , и хотя ясделал все возможное, чтобы оптимизировать мой код, мои тесты все еще говорят мне, что я могу добиться большего успеха (есть другие хорошо оптимизированные программы, которые достигают намного лучшего времени ... почти в два раза быстрее, чем моя процедура загрузки!)
Я знаю, что это не ошибка моего сервера ... вот идеи, которые мне еще нужно изучить:
Я попытался сгруппировать фрагменты в одном POST, естественно этопривело к увеличению производительности (20-35%), но возможности возобновления теперь уменьшены.
Я также думал об использовании SFTP / SSH, но я не уверен, что это быстро.
Используйте веб-сокеты для реализации возобновляемой загрузки (например, этот компонент ), я тоже не уверен в скорости.
Теперь мой вопрос: что я могу сделать, чтобы ускорить загрузку?Я открыт для любого предложения, которое я могу реализовать, включая инструменты командной строки (если лицензия позволяет мне поставлять его вместе с моим приложением), при условии, что:
- Поддерживается возобновляемая загрузка
- Быстро!
- Разумное использование памяти
- Защита и разрешение входа в систему / аутентификация пользователя
Кроме того, из-за серьезных проблем безопасности FTP являетсяне то, что я хотел бы реализовать.
Большое спасибо!