2010-07-13 12 views
6

Tengo una aplicación de servidor que se ejecuta en la nube de Amazon EC2. Desde mi cliente (el navegador) hago una solicitud HTTP que carga un archivo al servidor que luego procesa el archivo. Si hay un montón de procesamiento (archivo grande ), el servidor siempre agota el tiempo de espera con un error de continuación de back-end 504 siempre exactamente después de 120 segundos. Aunque recibo este error, el servidor continúa procesando la solicitud y la completa (verificando al verificar la base de datos) pero no puedo ver el resultado final en mi cliente debido al tiempo de espera.HTTP 504 expira después de exactamente 120 segundos

No tengo ni idea de por qué está sucediendo esto. ¿Alguien ha enfrentado un tiempo de espera 504 similar? ¿Hay algún servidor proxy intermedio que no está bajo mi control y que está agotando el tiempo?

+0

¿Podría resolver el problema? – Tony

Respuesta

0

es posible que los tiempos de espera del navegador durante la ejecución del script.

1

Suponiendo que se devuelve el código de estado correcto, el problema es que un proxy intermedio está expirando. "El servidor, mientras actuaba como una puerta de enlace o proxy, no recibió una respuesta oportuna del servidor ascendente especificado por el URI". (http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.5) Lo más probable es que indique que el servidor de origen está teniendo algún tipo de problema (es decir, tarda mucho tiempo en procesar su solicitud).), por lo que no responde rápidamente.

Quizás la mejor solución es volver a diseñar su aplicación de servidor para que responda con un código de estado "303 Ver otro"; luego, su cliente puede recuperar los datos en un punto de datos posterior, una vez que el servidor finaliza el procesamiento y crea el resultado final.

Editar: Otra idea es volver a diseñar su aplicación de servidor para que responda con un código de estado "413 entidad de solicitud demasiado grande" cuando el tamaño de la entidad de solicitud es demasiado grande. Esto deshacerse del error, aunque puede hacer que su aplicación menos útil si puede sólo "pequeños" los archivos de proceso "

Otras soluciones posibles:. El valor de tiempo de espera

  • Aumento del proxy (si es bajo su control)
  • hacer su solicitud a un servidor diferente (si hay otro, el servidor más rápido con la misma aplicación)
  • hacer su solicitud de manera diferente (si es posible) de tal manera que va a enviar menos datos a la vez
+0

¿Alguna idea para resolver el problema? Mi servidor está agotando el tiempo después de 30 segundos. Mismo escenario, cargando archivos grandes en Amazon EC2 – Tony

+0

¿Aparte de los mencionados? Lo siento, no. –

5

Tengo un problema similar y, en mi caso, creo que se debe a la conexión entre Elastic Load Balancer (ELB) y la instancia EC2.

Para una solución a largo plazo voy a ir con el 303 estado de respuesta + procesamiento de fondo sugerido por james.garriss arriba.

Para una solución a corto plazo, es posible que el soporte de Amazon aumente el tiempo de espera de ELB (consulte su respuesta en https://forums.aws.amazon.com/thread.jspa?messageID=491594&#491594). Desafortunadamente, no parece haber ninguna forma de cambiar el tiempo de espera usted mismo a través de la API o la consola.

[actualización] AWS ahora sí le permite actualizar el tiempo de espera sea a través de la configuración de la consola, CLI o .ebextensions. Ver http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/config-idle-timeout.html (gracias @Daniel Patz para la actualización)

+2

Parece que ahora puede configurar el tiempo de espera usted mismo ahora: http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/config-idle-timeout.html –

Cuestiones relacionadas