Когда клиент делает действительный запрос к серверу, между ними устанавливается временное соединение для завершения процесса отправки и получения. Но есть сценарии, в которых необходимо поддерживать соединение, так как существует необходимость в автоматических запросах и ответах между программами, которые обмениваются данными. Взять, к примеру, интерактивную веб-страницу. После загрузки веб-страницы необходимо отправить данные формы или загрузить дополнительные компоненты CSS и JavaScript. Соединение необходимо поддерживать для повышения производительности и бесперебойной связи между клиентом и сервером.
Python предоставляет модуль urllib3, в котором есть методы, позволяющие позаботиться о повторном использовании соединения между клиентом и сервером. В приведенном ниже примере мы создаем соединение и делаем несколько запросов, передавая различные параметры с помощью запроса GET. Мы получаем несколько ответов, но также подсчитываем количество подключений, использованных в процессе. Как видим, номер соединения не меняется, что подразумевает повторное использование соединения.
from urllib3 import HTTPConnectionPool pool = HTTPConnectionPool('ajax.googleapis.com', maxsize=1) r = pool.request('GET', '/ajax/services/search/web', fields={'q': 'python', 'v': '1.0'}) print 'Response Status:', r.status # Header of the response print 'Header: ',r.headers['content-type'] # Content of the response print 'Python: ',len(r.data) r = pool.request('GET', '/ajax/services/search/web', fields={'q': 'php', 'v': '1.0'}) # Content of the response print 'php: ',len(r.data) print 'Number of Connections: ',pool.num_connections print 'Number of requests: ',pool.num_requests
Когда мы запускаем вышеуказанную программу, мы получаем следующий вывод: