¿Valores de tiempo de espera HTTP POST sensacionales para usar cuando se emiten solicitudes mediante programación?

StackOverflow https://stackoverflow.com/questions/171099

  •  05-07-2019
  •  | 
  •  

Pregunta

Al emitir solicitudes HTTP POST mediante programación, ¿qué valores de tiempo de espera serían razonables?

En mi caso, estoy buscando establecer valores de tiempo de espera 'sensibles' al realizar 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 concurrentemente, me gustaría especificar un tiempo razonable más allá del cual se considera que una solicitud ha caducado.

PHP's el tiempo de espera predeterminado del socket es de 60 segundos. Esto parece un tiempo innecesariamente largo de espera 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.

Deberíamos poder suponer, la mayoría del tiempo , que el hecho de no emitir una respuesta a una solicitud dentro de X segundos significa que es poco probable que el host emita una respuesta dentro de un tiempo razonable para los 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. ¿Rara vez toman más de 10 segundos? 5 segundos?

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

¿Fue útil?

Solución

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

Una solicitud POST envía datos para ser procesados. ¿Cuánto tiempo tarda el procesamiento? Esto será específico de la aplicación / datos.

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

Esencialmente, no hay un tiempo de espera universal razonable. Tienes que usar tu propio juicio basado en tus necesidades específicas. Configura una prueba y úsala para determinar tus límites.

Otros consejos

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 intentar conectarse al servidor remoto y el tiempo de espera después de enviar la solicitud, que deben esperar una respuesta.

Si este es un servicio web local, establecería un 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 trabajadores se bloqueen en ese servicio remoto, lo que provoca otros errores ascendentes.

En cuanto al tiempo de espera de lectura, eso es más complicado, necesita que sea bajo, por lo que no agote a su grupo de trabajadores que esperan el regreso del servicio remoto, pero tampoco lo quiere tan bajo. que cierra la conexión antes de leer una respuesta. Eso es algo que tendrá que probar y luego realizar un seguimiento como una métrica cuando su sistema esté en producción.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top