Главная страница
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.017 c
15-1219000113
Andy BitOff
2008-08-17 23:08
2008.10.05
Компонент реализующий RAMDisk.


2-1219056641
kopernik21187
2008-08-18 14:50
2008.10.05
доступ к данным подчиненной таблицы


15-1218831883
axis_of_evil
2008-08-16 00:24
2008.10.05
windows .. samba, кажись


15-1219010733
No_Dead(w)
2008-08-18 02:05
2008.10.05
монитор не выключается%)


2-1219304173
начинающий
2008-08-21 11:36
2008.10.05
как выбрать данные?