Мое еще не выпущенное приложение Delphi 2010 позволяет пользователям загружать свои файлы на мои серверы. Сейчас я использую HTTPS POST для отправки файлов, алгоритм (упрощенный) таков:
т.е. для файла размером 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 - это не то, что я хотел бы реализовать.
Большое спасибо!