Конференция "Сети" » Таймаут в инди 10, некоректно считает? [D7, NT4, Win2k, WinXP]
 
  • sniknik © (20.10.10 12:17) [0]
    Ставлю значение
    HTTP.ReadTimeout:= 30000;
    после выполняю
    HTTP.Get(...);
    Сервер "висит", вернее я для проверки обращаюсь к скрипту который не отдает значение (в нем бесконечный цикл). Ожидаю что таймаут прервет ожидание на клиенте через 30(задается с миллисекундах т.что 30000/1000) сек (+-2,3 сек не принципиально) но реально коннект держится примерно в 3 раза дольше (88 сек в последний раз), что как то через-чур.
    Можно конечно "подогнать" поделить значение на 3, но... хотелось бы понять причину. Никто не сталкивался/знает в чем может быть дело?
  • Сергей М. © (21.10.10 10:29) [1]
    А с локальным web-сервером та же картина наблюдается ?
  • sniknik © (21.10.10 12:05) [2]
    Ага, у меня как раз сделано типа "трехзвенки", клиент по https конектится к локальному серверу, а тот в свою очередь делает запрос "в мир/интернет".
    Ситуация абсолютно идентичная.
    Я уж думаю может это из-за ssl библиотек неправильно время рассчитывается... т.е. например есть у них в нутрях метод, который выполняется секунду например, они и считают не время, а количество вызовов этого метода, а подключенный ssl его "тормозит"... вот и получается тоже количество вызовов это втрое длиннее по времени.
    Ну как то так. (попозже проверю идею, повторю тест по http)
  • Сергей М. © (21.10.10 12:24) [3]
    А может ну его, этот Инди ?
    Не буду оригинален и предложу как альтернативу все тот же Синапс.
    При прочих равных условиях эквивалентный по функц-ти http-клиентский класс в его составе в момент выполнения блок.вызова чтения из сокета будет передавать тебе в колбэке управление именно с той периодичностью (разрешение до 1 мс), с которой ты ему скажешь. Получая управление ты волен контролировать свой собственный сч-к таймаута ожидания приема и снимать запрос в соответствии с нужными тебе критериями.
  • Медвежонок Пятачок © (21.10.10 12:33) [4]
    напоровшись на похожее, я использовал idTCPClient c самопальной реализацией http.
    читал через ридстрим с установленным таймаутом.
    ридтаймаут работал вроде как адекватно.
  • sniknik © (21.10.10 15:23) [5]
    > Не буду оригинален и предложу как альтернативу все тот же Синапс.
    Пока не могу, но в ближайшем будущем намечается "переезд" на 2010 (уже купили), вот тогда, будет время, буду думать.

    > напоровшись на похожее
    Т.е. я не одинок... отрадно. :)

    > c самопальной реализацией http.
    http, проверил (см. [2]), работает нормально, догадки там сделанные похоже подтверждаются.
  • asafr (25.10.10 09:52) [6]
    Может я не совсем понял и вник в вопрос, но почему бы не попробовать
    IdHTTP1.ConnectTimeout := 30000;
    HTTP.ReadTimeout := 30000;



    И далее
    HTTP.Get(...);



    В Indy10 - IdHTTP1.ConnectTimeout должен быть, если не ошибаюсь....
  • sniknik © (25.10.10 13:20) [7]
    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.10 19:47) [8]
    Из-за подобных вещей давно плюнул на клиенты инди.
  • Anatoly Podgoretsky © (26.10.10 08:54) [9]
    > DVM  (25.10.2010 19:47:08)  [8]

    Долго же ты мучался.
 
Конференция "Сети" » Таймаут в инди 10, некоректно считает? [D7, NT4, Win2k, WinXP]
Есть новые Нет новых   [134436   +25][b:0][p:0.001]