Конференция "Сети" » httpsend из synapse работает много медленней браузера [D7, WinXP]
 
  • _guest_ (09.10.13 16:45) [0]
    httpsend из synapse работает много медленней браузера. Можно ли ускорить его работу? Получаю информацию с портала с помощью его rest-сервисов по HTTPS. Т.е. пошел по адресу - получил какую-то инфу и так много-много раз (очень много: сотни тысяч). Все работает, но медленно. Портал действительно перегружен, ночью ситуация улучшается. Но вижу, что в какие-то моменты подвисает аж до нескольких минут, набираю этот же адрес, на котором стоит программа, в браузере, и ответ приходит немедленно. В первом варианте использовал HTTPGetText внутри которого httpsend создается, используется и убивается. Затем попробовал создать его сам и освобождать в конце, думал может Cookies необходимы для нормальной (побыстрее) работы. Нет - результат, тот же. Несколько потоков, как вариант ускорения - это понятно, но сейчас речь идет о проблеме однократного вызова get. В чем может быть причина?
  • Sapersky (09.10.13 21:56) [1]
    Зависания на несколько минут - возможно, из-за того, что сайт долго не отвечает, а на каждый запрос стоит таймаут в полторы минуты. Почему-то этот таймаут (поле FTimeout) не настраивается снаружи, но можно самому сделать свойство.
    Браузер при этом может брать страницу из кэша. Или сайт в этот момент как раз "отвисает".

    Что касается множественных запросов, то несколько помогает сохранение соединения (KeepAlive). Так-то оно включено по умолчанию, но чтобы работало, нужно ещё установить FHTTP.Protocol := '1.1' (и не пересоздавать объект на каждом запросе, конечно).

    Но вообще я не специалист по сетям, и не могу однозначно сказать, что проблем в библиотеке нет. Может, имеет смысл попробовать тот же Indy, хотя бы для сравнения.
  • DVM © (09.10.13 22:18) [2]

    > Sapersky   (09.10.13 21:56) [1]


    >
    > Что касается множественных запросов, то несколько помогает
    > сохранение соединения (KeepAlive).

    Оно не совместимо имхо с SSL/TLS.


    > _guest_   (09.10.13 16:45) 

    У тебя банально сокеты могут исчерпываться свободные. На это еще накладываются существенные задержки, связанные с установлением  SSL/TLS соединения, особенно на загруженном сервере, которому при каждом подключении необходимо производить весьма тяжелую в вычислительном плане операцию - расшифровку предмастерного ключа клиента с помощью алгоритма RSA. Для ускорения работы SSL/TLS клиент должен повторно использовать SessionID оставшийся от предыдущего SSL соединения, но я не уверен, что Indy или Synapse это позволяют делать.
  • DVM © (09.10.13 22:20) [3]

    > DVM ©   (09.10.13 22:18) [2]


    > Оно не совместимо имхо с SSL/TLS.

    хотя не, вру, совместимо все таки.
  • _guest_ (10.10.13 11:09) [4]
    Спасибо, поэкспериментирую. Я не то что не специалист в сетях, а первый раз попробовал. Собственно, результат всех устраивает, кроме меня самого. Долго ждать результата при внесении каких-нибудь изменений :) Да и сомнения все-таки возникают при сравнении с браузером. Вряд ли он берет страницу из кэша, если я ни разу туда не заходил, это же сервис таким образом результат возвращает. Браузер тоже виснет периодически, когда портал загружен, но все ж таки не так как программа. С инди поэкcпериментировать в ближайшее время не смогу - не могу подобрать библиотечки ssl к своей версии, но попробовал какой то сторонний компонент IEHTTP, результат тот же что и с synapse. Хотя выкидываю все лишнее, проверяю только обращение к серверу - виснет, а из браузера не так сильно. Покопаю таймауты, это бы меня спасло, пошли бы дальнейшие попытки, а так просто стоит. И правильно ли я понимаю, если я отдам свою прогу, чтобы переделали под веб, то скорее всего скорость увеличится или все будет тоже самое?
 
Конференция "Сети" » httpsend из synapse работает много медленней браузера [D7, WinXP]
Есть новые Нет новых   [118607   +37][b:0][p:0]