2011-01-12 14 views
9

Alguien nos puede explicar la diferencia de comportamiento entre los siguientes parámetros:¿Cuál es la diferencia entre la opción keep_alive y la persistente para la solicitud HTTP?

parámetro

keep_alive en clase Zend_Http_Client?

y

persistente en clase Zend_Http_Client_Adapter_Socket?

Me gustaría saber qué debo hacer para mantener abierta la conexión HTTPS (para evitar la negociación del SSL).

Gracias, Gaston

+0

Parece que quiere persistencia. – Amber

Respuesta

0

KeepAlive significa que la conexión puede ser reutilizada en el transcurso de una solicitud individual, a pesar de que se cerrará al final de la solicitud. Persistente significa que la conexión sobrevivirá más allá de la solicitud individual, por lo que será utilizada por una solicitud posterior en el mismo proceso de PHP.

+0

Esto no es exacto. Keep-Alive significa que puede realizar varias solicitudes al mismo servidor (suponiendo que use HTTP/1.1) utilizando la misma conexión. Sin embargo, si no realiza solicitudes rápidamente, el servidor cerrará la conexión. – Brad

1

Si utiliza la conexión persistente o debe utilizar también el keep-alive, como sin mantener la conexión HTTP 1.1 activa su persitent tendrá que hacer un montón de trabajo para emular el trabajo.

Editar: (ya era hora de comer)

Keepalive ajustes habla de un ajuste de quite- poco tiempo, establecido por el servidor. Apache por defecto maneja 15s para solicitudes Keep-Alive, pero una configuración optimizada actual es 5s. Esto se hace principalmente para ayudar al cliente HTTP a descargar js y css adjuntos a una página en la misma conexión HTTP. Si puede ajustar la configuración del servidor, puede intentar las consultas Keep-Alive más largas (pero tenga cuidado, esto limitará seriamente el número de clientes a los que accedió su servidor).

La conexión persistente modo se hace para emular realmente una conexión persistente a largo plazo, el socket abierto no se cierra al final de la secuencia de comandos. Debe tener mucho cuidado con tal configuración. ¿Estás en modo CLI? FCGI ?. Si está ejecutando un proceso de Apache, no estoy seguro de que obtenga la misma conexión en la siguiente solicitud en este script (que puede ser manejado por otro proceso de apache), incluso peor si su código se está ejecutando. varios servidores Apache en una implementación grande. Y esto es para el lado del cliente (PHP), pero también puede ser un gran problema para el servidor de destino.

Re-edición: (como algo acerca de SSL hay que decirlo)

¿Seguro que necesita para optimizar el tiempo de negociación SSL? SSL usa Caché, al menos en el lado del servidor, para limitar la negociación a la primera solicitud. El almacenamiento en memoria caché del lado del cliente de la sesión SSL se realiza mediante la función PHP stream_socket_client (que utiliza la clase Zend. Si no, puede probar una nueva clase por su cuenta (solo necesita implementar la interfaz) e intente usar curl, como curl use caché de sesión SSL de forma predeterminada

+0

gracias por su entrada –

0

FYI, mientras que keep-alive se supone que reutiliza la conexión HTTP, la clase de adaptador (al menos tan recientemente como 1.10) no maneja esto correctamente y abre una nueva conexión independientemente de la bandera.

Cuestiones relacionadas