Регулировка скорости загрузки файлов в Delphi XE 6 с Indy 10Delphi , Интернет и Сети , FTPРегулировка скорости загрузки файлов в Delphi XE 6 с Indy 10 При разработке FTP-сервера с использованием Delphi XE 6 и Indy 10 может возникнуть потребность в ограничении скорости загрузки файлов. В данной статье мы рассмотрим, как это можно сделать, используя встроенные возможности Indy и перехватчик потока данных. Оригинальный вопрос: Я разрабатываю FTP-сервер с использованием Delphi XE 6 и Indy 10. У меня есть проблема: мне нужно ограничить скорость загрузки файлов (например, 1 КБ/с, 1 МБ/с и т. д.), и я не могу этого добиться. Я знаю некоторые свойства, такие как BitsPerSec, но они влияют только на обмен данными протокола, не на обмен файлами с помощью команды RETR. Я вижу в IdFTPServer.pas, что поток преобразуется в строку и отправляется с помощью цикла repeat/until (с помощью IOHandler.Write()), но мне нужен какой-то способ контроля процесса загрузки/выгрузки и возможность ограничить скорость для всех входящих клиентских подключений. Пожалуйста, помогите мне в этом вопросе. Ответ: Для ограничения скорости загрузки файлов в Indy есть встроенный класс TIdInterceptThrottler, который можно использовать для ограничения скорости передачи данных. Экземпляр этого класса можно назначить любому объекту TIdTCPConnection через его свойство Intercept. Это не ограничивается только подключением к команде, его можно использовать и для подключений передачи данных. Вы можете получить доступ к объекту TIdTCPConnection файловой передачи в TIdFTPServer через член TIdFTPServerContext.DataChannel.FDataChannel, как в событии OnRetrieveFile:
В качестве альтернативы вы можете создать собственный класс T(File)Stream, унаследованный от TStream, переопределить виртуальные методы Read() и Write() для выполнения собственного ограничения скорости и назначить экземпляр этого класса параметру VStream события OnRetrieveFile и OnStoreFile. Примечание: При чтении кода IdFTPServer.pas вы неправильно интерпретировали код. Поток не преобразуется в строку. Содержимое потока отправляется как есть в виде бинарных данных в единственном вызове метода IOHandler.Write(TStream). Вы не должны непосредственно обрабатывать команду RETR. TIdFTPServer уже делает это для вас. Вместо этого используйте событие OnRetrieveFile для подготовки загрузок и событие OnStoreFile для загрузок. Контекст: Регулировка скорости загрузки файлов в Delphi XE 6 с Indy 10. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |