2012-01-19 11 views
7

Los principales marcos web (como Django, Pyramid, Rails, etc.) a menudo se ejecutan como servidores persistentes, con un servidor web independiente como nginx como interfaz. El servidor web se conecta a través de un protocolo como FastCGI o SCGI:¿Por qué los frameworks web sirven a través de FastCGI/SCGI, en lugar de HTTP?

browser --[http]--> nginx --[fastcgi]--> flup -> django 

Esto parece enrevesado para mí; ¿Por qué la solicitud se convierte a un protocolo completamente diferente, cuando el servidor puede ejecutar su propio servidor HTTP?

browser --[http]--> nginx --[http]--> wsgiref -> django 

Este enfoque parece ser más simple y más flexible, ya que sólo hay un protocolo de transporte y es un RFC.

Sin embargo, no creo que haya alguna vez visto un marco web fomentar el diseño de solo-http, por lo que supongo que debe haber una razón para ello.

¿Cuáles son las ventajas de usar un protocolo como FastCGI/SCGI aquí?

+2

C++/C probablemente supere esos servidores de depuración cualquier día. La mayoría (¿todos?) De esos marcos web están codificados en Python o Ruby, que son idiomas interpretados. – Blender

+0

@Blender: Si bien es cierto, eso probablemente no sea relevante. No esperaría que Django sirviendo a través de FastCGI fuera más rápido o más lento que Django sirviendo a través de HTTP. Además, ni Python ni Ruby son interpretados. Usan bytecode VMs, de manera similar a Java. –

+1

Buen punto. Me estoy golpeando la cabeza contra la pared, haciendo que Flask trabaje con Lighty ... También, es quisquilloso, pero en la página de inicio de Python dice '... interpretado, interactivo, orientado a objetos ...' – Blender

Respuesta

7

HTTP es un large, complex protocol. La reducción de la interfaz a las capacidades proporcionadas por FastCGI o WSGI permite que el marco gestione las solicitudes más rápido que si tuviera que tratar con el original.

Cuestiones relacionadas