Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Загрузчик на idHTTP зависает при загрузке страниц, Загрузчик на idHTTP зависает 
:(
    Опции темы
Pcrepair
Дата 7.1.2013, 02:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 16.1.2011

Репутация: нет
Всего: нет



Добрый день. Есть код загрузчика страниц(вызывается в поток):

Код

function TLoader.LoadHtmlCode(const PageUrl: String):string;
var
ErrorData:string; (*ответ сервера в тестовом виде*)
ResponseCode:integer; (*ответ сервера в виде кода ошибки*)
begin
   try
     (*---------настройка параметров закачки-----------*)
     FIdHttp.Request.UserAgent:=GetRandomUserAgent; (*получаем случайное значение Юзер-Агент*)
     FIdHttp.Request.AcceptLanguage:='ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3'; (*вроде нужно*)
     FIdHttp.Request.AcceptCharSet:='windows-1251,utf-8;q=0.7,*;q=0.3'; (*вроде нужно*)
     FIdHttp.ConnectTimeout:=10000;
     FIdHttp.ReadTimeout:=10000;
     FIdHttp.IOHandler:=FSSL;
     FIdHttp.HandleRedirects:=True;
     Result:=AnsiLowerCase(FIdHttp.Get(PageUrl));
       except
         Result:=PageUrl;
         (*тут вызов ПРОЦ для записи ответа сервера и УРЛ в лог*)
       end;
      Exit;  (*выход из функции. в РЕЗУЛЬТАТ содержится последнее значение*)
   end;
end; 


1. При высокой скорости трафика все работает нормально:
- загрузка 100 УРЛ за 20...25 сек (10 потоков одновременно)
- никаких утечек памяти
практически все как предначертано работает
2. При наличие потребителя трафика(другой РС в сети с работающим ТОРРЕНТ, источник интернета - роутер 3 мбит\сек):
- загрузка 97...100 УРЛ за 60...120 сек 
- один или два потока зависают(есть на форме индикатор числа работающих потоков)при закачке УРЛ и могут висеть часами, пока не закрыть программу
- никакой зависимости от УРЛ нет, в одном тесте одни УРЛ не закачиваются в другом другие
- еще одна особенность: в логе фиксируется ответ сервера. при наличие конкурента на трафик от 10 до 30 УРЛ не загружаются(то же различные, от теста к тесту), хотя ответ сервера = 200 (ну это не самая большая проблема, скоро будет добавлен код перезакачки УРЛ), но о чем то этот факт говорит?

Внимание! Вопросы:
1. в чем причина такого поведения TidHttp?
возможно надо что то настроить в параметрах загрузчика?
2. возможно ли ввести в поток загрузчика таймер типа:

Код

procedure TLoader.Execute;
begin
  CallTimer;
  FIdHttp.Get(PageUrl);
end;

procedure TLoader.CallTimer;
begin
  (*тут реализация таймера на 100 сек, но на чем? TTimer явно не подойдет*)
   Событие OnTimer вызывает
   FIdHttp.Socket.Close; (*если через 100 сек страница не закачается и поток не сдохнет 
   принудительно закрыть idHTTP, поток после тоже закроется*)
   может кто подскажет реализацию таймера, на чем бы его сделать?
end;


почитал на форумах что нашел, похоже таймер единственный вариант решить эту проблему
--------------------
Сборник рабочего кода Процедур и Функций DelPhi     http://validcoderepo.narod.ru/
PM MAIL WWW   Вверх
gex5293
Дата 14.2.2013, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 21.7.2010

Репутация: нет
Всего: нет



Ttimer в потоке? smile  а про sleep не читал?
PM MAIL   Вверх
MetalFan
Дата 14.2.2013, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



Как код потока написан? FIdHttp где создается/убивается?

Цитата(Pcrepair @  7.1.2013,  02:12 Найти цитируемый пост)
возможно ли ввести в поток загрузчика таймер типа

Зачем, если и так выставил Connection/ReadTimeout? Выставь их на 100с, зачем таймеры городить?


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.1004 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.