Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.48 MB
Время: 0.015 c
15-1218023843
Ru
2008-08-06 15:57
2008.10.05
А чего чат сдох?


15-1218559351
Копир
2008-08-12 20:42
2008.10.05
Басни Эзопа. Ничего не напоминает?


2-1219663002
Greebanyi 2bus
2008-08-25 15:16
2008.10.05
Два процесса одновременно


15-1218639160
Goric
2008-08-13 18:52
2008.10.05
Отображение файлов


2-1219757900
Евгений Р.
2008-08-26 17:38
2008.10.05
Координаты компонента