Текущий архив: 2008.10.05;
Скачать: CL | DM;
Вниз
ftp-клиент, IdFTP Найти похожие ветки
← →
workbench (2008-08-28 15:49) [0]Программа клиент должна в течение дня скачивать с ftp и туда же закачивать достаточно большое кол-во файлов (порядка неск. тысяч в день). Предполагается что поддерживать соединение весь день она не будет, а будет запускаться каждые 10-15 минут. Какой конструкцией можно обеспечить "надёжное соединение" c ftp (например, нужно чтобы при разрыве соединения на закачке к.-л. файла прога вновь устанавливала соединение)? Пока ничего лучше не придумал иначе как перед каждым вызовом IdFTP.Get, Put, List и т.д проверять св-во IdFTP.Connected, то есть что-то типа того:
if not IdFTP.Connected then ConnectToFTP;
IdFTP.get(...);
но это наверно не совсем правильно...
← →
Сергей М. © (2008-08-28 16:34) [1]
> это наверно не совсем правильно
Почему ?
← →
workbench (2008-08-28 16:58) [2]
> Сергей М.
м... хотя бы потому что выглядит как-то не очень красиво, но если вы считаете что это вполне нормально, то я конечно не буду париться
может подскажете тогда ответ вот на какой вопрос: при использовании того же самого компонента (IdFTP), прога "подвисает" на вызове IdFTP.Get(...), причём сервер этот по истечении 3-х минутного периода (если не было запросов) клиента "отключает", так вот при таком зависании даже после 3-х минут продолжает висеть. Очень неприятная штука, если прога запускается порядка 30 разиков в день, то соот-но может возникнуть ситуация что на серваке будет висеть такое же кол-во заглохших процессов, может кто-нить сталкивался с подобным?
← →
Dennis I. Komarov © (2008-08-28 17:50) [3]У меня есть служба каторая ежедневно передает туда сюда файлы по фтп
Раньше делал ее на Indy - не очень стабильно работает
На ICS - были проблемы - при вынесении логики передачи в dll большие файлы стали приходить с искажениями... (разбераться не стал)
Сейчас переделал все на "WinInet" - вроде пока без глюков...
← →
Сергей М. © (2008-08-28 19:56) [4]
> прога "подвисает" на вызове IdFTP.Get(...)
Не трынди
"Подвисает" не "прога", а поток, в котором вызывается этот метод.
Если этот поток является основным, то шмякни на форму компонент TIdAntifreeze и донт ворри би хеппи.
← →
workbench (2008-08-29 09:47) [5]
> Сергей М.
Поток основной (и единственный), а вот IdAntifreeze мне не поможет, ибо приложение консольное (окно не нужно) и объект Application соот-но не используется.
Ещё была вот такая мысль - сделать что-то вроде контрольных точек перед закачкой и после закачки файла:
CPoint := false;
IdFTP.Get(...);
CPoint := true
... и создать ещё один поток который отсчитывает время и проверяет значение CPoint, и при превышении интервала завершает процесс, это хотя бы поможет предотвратить описанную в [2] ситуацию (с зависанием n-го кол-ва экз-ов проги).
← →
Сергей М. © (2008-08-29 10:26) [6]
> workbench (29.08.08 09:47) [5]
Отсюда и очевидное решение - создать доп.поток и вынести в него всю работу с IdFTP.
> поток который отсчитывает время и проверяет значение CPoint
Вот это как раз можно делать в осн.потоке.
Страницы: 1 вся ветка
Текущий архив: 2008.10.05;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.006 c