-
Ставлю значение HTTP.ReadTimeout:= 30000; после выполняю HTTP.Get(...); Сервер "висит", вернее я для проверки обращаюсь к скрипту который не отдает значение (в нем бесконечный цикл). Ожидаю что таймаут прервет ожидание на клиенте через 30(задается с миллисекундах т.что 30000/1000) сек (+-2,3 сек не принципиально) но реально коннект держится примерно в 3 раза дольше (88 сек в последний раз), что как то через-чур. Можно конечно "подогнать" поделить значение на 3, но... хотелось бы понять причину. Никто не сталкивался/знает в чем может быть дело?
-
А с локальным web-сервером та же картина наблюдается ?
-
Ага, у меня как раз сделано типа "трехзвенки", клиент по https конектится к локальному серверу, а тот в свою очередь делает запрос "в мир/интернет". Ситуация абсолютно идентичная. Я уж думаю может это из-за ssl библиотек неправильно время рассчитывается... т.е. например есть у них в нутрях метод, который выполняется секунду например, они и считают не время, а количество вызовов этого метода, а подключенный ssl его "тормозит"... вот и получается тоже количество вызовов это втрое длиннее по времени. Ну как то так. (попозже проверю идею, повторю тест по http)
-
А может ну его, этот Инди ? Не буду оригинален и предложу как альтернативу все тот же Синапс. При прочих равных условиях эквивалентный по функц-ти http-клиентский класс в его составе в момент выполнения блок.вызова чтения из сокета будет передавать тебе в колбэке управление именно с той периодичностью (разрешение до 1 мс), с которой ты ему скажешь. Получая управление ты волен контролировать свой собственный сч-к таймаута ожидания приема и снимать запрос в соответствии с нужными тебе критериями.
-
напоровшись на похожее, я использовал idTCPClient c самопальной реализацией http. читал через ридстрим с установленным таймаутом. ридтаймаут работал вроде как адекватно.
-
> Не буду оригинален и предложу как альтернативу все тот же Синапс. Пока не могу, но в ближайшем будущем намечается "переезд" на 2010 (уже купили), вот тогда, будет время, буду думать.
> напоровшись на похожее Т.е. я не одинок... отрадно. :)
> c самопальной реализацией http. http, проверил (см. [2]), работает нормально, догадки там сделанные похоже подтверждаются.
-
Может я не совсем понял и вник в вопрос, но почему бы не попробовать IdHTTP1.ConnectTimeout := 30000;
HTTP.ReadTimeout := 30000; И далее HTTP.Get(...); В Indy10 - IdHTTP1.ConnectTimeout должен быть, если не ошибаюсь....
-
ConnectTimeout это на время соединения > Indicates the number of milliseconds that can elapse before aborting an attempt to connect to the server.
У меня сервер локальный (один из) т.е. соединяет за долю секунды, ответа нет на чтении данных. Т.е. результат очевиден до проб.
> но почему бы не попробовать Но почему бы и нет. Попробовал (на самом деле еще в тот же день как столкнулся), разницы никакой. А вот с http/https ([5]) разница есть.
p.s. Но вообще уже "забил" на это, поставил /3 и все. Реально уже договорился на доп время для переделки на Синапс.
-
Из-за подобных вещей давно плюнул на клиенты инди.
-
> DVM (25.10.2010 19:47:08) [8]
Долго же ты мучался.
|