Как оптимизировать процедуру загрузки с помощью Delphi 2010?

Мое еще не выпущенное приложение Delphi 2010 позволяет пользователям загружать свои файлы на мои серверы. Сейчас я использую HTTPS POST для отправки файлов, алгоритм (упрощенный) таков:

  1. Разделите файл на "кусочки" (256 КБ каждый)
  2. Для каждого кусочка отправьте его на сервер

т.е. для файла размером 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)использовал мой профилировщик снова и снова, и осталось не так много для оптимизации, кроме изменения самой процедуры загрузки.

Я также использую многопоточность, и хотя я сделал все возможное, чтобы оптимизировать свой код, мои бенчмарки все еще говорят мне, что я могу сделать лучше (есть другие хорошо оптимизированные программы, которые достигают намного лучшего времени... почти в два раза быстрее, чем моя процедура загрузки!)

Я знаю, что это не вина моего сервера... вот идеи, которые мне еще предстоит изучить:

  1. Я попробовал группировать фрагменты в один POST, естественно, это привело к увеличению производительности (20-35%), но возможность возобновления теперь уменьшилась.

  2. Я также думал об использовании SFTP / SSH, но я не уверен, что это быстро.

  3. Использовать веб-сокеты для реализации возобновляемой загрузки (как этот компонент), я тоже не уверен в скорости.

Теперь мой вопрос: есть ли что-то, что я могу сделать, чтобы ускорить загрузку? Я открыт для любого предложения, которое я могу реализовать, включая инструменты командной строки (если лицензия позволяет мне поставлять их с моим приложением), при условии, что:

  1. Поддерживается возобновляемая загрузка
  2. Быстро!
  3. Разумное использование памяти
  4. Безопасность и возможность авторизации

Также, из-за серьезных проблем с безопасностью, FTP - это не то, что я хотел бы реализовать.

Большое спасибо!

7
задан Artjom B. 30 November 2014 в 14:18
поделиться