Http запросы — мы все это делаем неправильно

В данной статье рассматривается keep alive. Еще со времен http 1.1 между клиентом и сервером существует негласная договоренность о том, что tcp-соединение, которое установлено, не будет закрыто, даже если процесс завершился, оно будет использовано и для очередных запросов. Такая мера вызвана временем необходимым на соединение, иными словами это сделано чтобы избежать задержек, ведь бывает что на выполнение запроса требуется меньше затрат, чем на само соединение. Эта система используется и для браузеров и для серверов, но вот библиотеки программирования почему-то эту систему обошли стороной.

Если открыть по очереди несколько запросов, то и соединений в библиотеках будет столько же. Но это вполне исправимо. Необходимо просто внести в код строчку для создания и удаления дескриптора и цикла. Это, несомненно, позволит сократить время работы цикла. Конечно, потребуется определенный отрезок времени, чтобы сформировать запрос, но это все равно меняет дело. Следует еще учесть, что использование http без ssl, так же способно сократить время соединения.

Если Вы используете curl, тут можно поступить следующим образом: перенести curl_init() в конструктор, и убрать его из метода сделанного запросом. Curl при этом будет сам поддерживать соединения для хоста и порта, пере открывая при этом соединение, которое закрыто.

На самом деле, тут дело не только об этих языках и скриптах, такую ситуацию видно почти на всех библиотеках. Конечно, многие делают все правильно, но для некоторых это пока секрет, которым хочу поделиться. Вот, например, есть один метод: необходимо заменять вызов функции requests.request(), на вызов метода session, который нужно создать заранее. Надеюсь, эта статья помогла Вам, и Вы нашли в ней для себя важную и полезную информацию.

Статья написана при поддержке компании Digitec — официальная дистрибуция цифровой техники. Широкий ассортимент товаров и возможности оптовых и крупно оптовых поставок.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *