verificar - ¿Valores de tiempo de espera HTTP POST razonables para utilizar al emitir solicitudes programáticamente?
revista ethos (2)
Cuando se emiten programáticamente solicitudes HTTP POST, ¿qué valores de tiempo de espera serían razonables?
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.
El tiempo de espera del socket predeterminado de PHP es de 60 segundos. Esto parece un tiempo innecesariamente largo para esperar antes de decidir que una solicitud no se completará.
Como se trata de solicitudes POST, deben completarse rápidamente: no hay datos que recuperar y devolver como con una solicitud GET.
Deberíamos ser capaces de suponer, la mayoría de las veces , que el hecho de no emitir una respuesta a una solicitud dentro de X segundos significa que es improbable que el host emita una respuesta dentro de un tiempo razonable para valores de X significativamente menores a 60.
Sin duda, 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.
Recomendaría configurar una prueba, ya que hay demasiados factores involucrados para dar un valor que siempre será sensato.
Una solicitud POST envía 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 hay 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.
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, es más complicado, necesita que sea bajo, por lo que no agota su grupo de trabajadores que están esperando que regrese el servicio remoto, pero tampoco lo quiere tan bajo que se cierre. 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.