Python: reutilización de la conexión

Cuando un cliente realiza una solicitud válida a un servidor, se establece una conexión temporal entre ellos para completar el proceso de envío y recepción. Pero hay escenarios en los que la conexión debe mantenerse viva ya que se necesitan solicitudes y respuestas automáticas entre los programas que se están comunicando. Tomemos, por ejemplo, una página web interactiva. Una vez cargada la página web, es necesario enviar los datos del formulario o descargar más componentes CSS y JavaScript. La conexión debe mantenerse activa para un rendimiento más rápido y una comunicación ininterrumpida entre el cliente y el servidor.

Python proporciona urllib3módulo que tenía métodos para encargarse de la reutilización de la conexión entre un cliente y un servidor. En el siguiente ejemplo, creamos una conexión y hacemos varias solicitudes pasando diferentes parámetros con la solicitud GET. Recibimos múltiples respuestas pero también contamos el número de conexiones que se han utilizado en el proceso. Como vemos el número de conexión no cambia lo que implica la reutilización de la conexión.

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

Cuando ejecutamos el programa anterior, obtenemos el siguiente resultado:

Response Status: 200
Header:  text/javascript; charset=utf-8
Python:  211
php:  211
Number of Connections:  1
Number of requests:  2