2008-10-04 9 views
9

Al emitir solicitudes HTTP POST mediante programación, ¿qué valores de tiempo de espera serían razonables?Sensible valor de tiempo de espera HTTP POST para usar al emitir solicitudes programáticamente?

En mi caso, estoy buscando establecer valores de tiempo de espera 'sensatos' cuando realizo solicitudes POST en PHP, sin embargo, esto se aplica a cualquier idioma.

Necesito poder emitir un conjunto de solicitudes, cada una a una URL especificada por el usuario. Si necesito procesar las solicitudes de forma consecutiva en lugar de al mismo tiempo, me gustaría especificar un tiempo razonable más allá del cual se considera que el tiempo de espera ha expirado.

PHP default socket timeout es de 60 segundos. Esto parece un tiempo innecesariamente largo para esperar antes de decidir que una solicitud no se completará.

Como estas son solicitudes POST, deben completarse rápidamente; no hay datos que recuperar y devolver como con una solicitud GET.

Debemos ser capaces de asumir, mayor parte del tiempo, que la no emisión de una respuesta a una solicitud dentro de X segundos significa que el anfitrión es poco probable que emitir una respuesta en un plazo razonable para valores de X significativamente menos de 60.

Seguramente los hosts rara vez tardan más de 60 segundos en responder a una simple solicitud POST. ¿Raramente toman más de 10 segundos? ¿5 segundos?

¿Cuáles podrían ser los valores razonables para X en la práctica? Las justificaciones que acompañan a las sugerencias serían extremadamente beneficiosas.

+0

Si está cargando un archivo, especialmente desde un dispositivo móvil, podría tomar más de 60 segundos. – Oscar

Respuesta

5

Recomendaría configurar una prueba, ya que hay demasiados factores involucrados para dar un valor que siempre será sensato.

Una solicitud POST envía los datos para ser procesados. ¿Cuánto tiempo dura el procesamiento? Esta será aplicación/datos específicos.

¿Dónde está el anfitrión? El usuario está suministrando la URL, por lo que será desconocido. No podemos saber qué tráfico hay entre su aplicación y el host. No podemos conocer la carga del servidor del host.

Esencialmente, no existe un tiempo de espera sensible universal. Debe usar su propio juicio según sus necesidades específicas. Configure una prueba y úsela para determinar sus límites.

1

La mayoría de las bibliotecas tienen un tiempo de espera de conexión y un tiempo de espera de lectura. Es decir, el tiempo de espera entre tratar de conectarse al servidor remoto y el tiempo de espera después de enviar la solicitud, que deben esperar una respuesta.

Si se trata de un servicio web local, establecería el tiempo de espera de conexión bajo, 1 segundo o menos si su biblioteca lo admite. Si el servicio remoto al que se está conectando no está disponible en mi humilde opinión, es mejor devolver una respuesta al usuario de inmediato, que permitir que todos los subprocesos de trabajo se bloqueen en ese servicio remoto, lo que ocasiona otros errores en el flujo ascendente.

En cuanto al tiempo de espera de lectura, que es más complicado, necesita que sea bajo, para que no agote su grupo de trabajadores que están esperando que vuelva el servicio remoto, pero tampoco lo desea. bajo que cierra la conexión antes de leer una respuesta. Eso es algo que tendrá que probar, luego realice el seguimiento como una métrica cuando su sistema esté en producción.

Cuestiones relacionadas