2012-05-15 19 views
11

Estoy intentando comprender la funcionalidad de WSGI y necesito ayuda.Comprensión de WSGI

Hasta ahora sé que es una especie de middleware entre servidores y aplicaciones, utilizado para interconectar diferentes marcos de aplicaciones (que residen en el servidor) con la aplicación, siempre que el marco en cuestión tenga un adaptador WSGI. Continuando con la parte teórica, sé que para que el servidor se comunique con la aplicación, el servidor llama a un invocable (que toma dos argumentos: variables de entorno y función start_response). Aquí la función start_response es provista por el servidor (?) Y utilizada por la aplicación con un estado de respuesta y encabezado seguido del cuerpo de la respuesta.

Entiendo muy poco de lo que escribí arriba, así que aquí están las preguntas para principiantes: 1) ¿Cuál es el flujo de llamada general? La aplicación proporcionará al servidor un invocable y luego el servidor invocará la aplicación utilizando esa función invocable y utilizando env_vars y start_response como argumentos.

2) Lo que más me confunde es que la aplicación está enviando los encabezados de solicitud y luego envía el cuerpo de la respuesta también. ¿Qué tipo de solicitud es esto?

Por favor, aclararme ya que no puedo entender esto.

Gracias!

+1

Dado que usted no dice lo que has leído hasta ahora, asegúrese de leer la PEP real, si no lo ha hecho. http://www.python.org/dev/peps/pep-3333/ –

Respuesta

7

El flujo de llamadas es la siguiente:

  1. El servidor tiene una conexión HTTP,
  2. servidor analiza la línea de petición HTTP y encabezados, leer el cuerpo,
  3. servidor puebla el Environ dict de acuerdo con la solicitud,
  4. solicitud de llamadas al servidor invocable con environ y start_response como argumentos,
  5. aplicación llama exigibles start_response con el estado y encabezados de respuesta,
  6. aplicación cuerpo de la respuesta de retorno al servidor,
  7. servidor envíe la respuesta HTTP al cliente.

Para su segundo problema, la solicitud/respuesta es una interfaz definida por el protocolo wsgi (por ejemplo, estado = '200 OK', response_headers = [('Content-type', 'text/plain')]), no es lo mismo con http solicitud/respuesta.

Puede buscar en el módulo de biblioteca de stands wsgiref como referencia.

+0

¿así que todo es en un solo proceso? (aplicación y servidor web) – Pynchia

+0

El paso 4 debe realizarse en un solo proceso. Pero el servidor que acepta la conexión http puede ser otro proceso, p. puede pasar la información de solicitud a otro proceso utilizando el protocolo fastcgi, scgi, etc. – freestyler

+0

Gracias, pero ayudaría a aclarar qué procesos (procesos del sistema operativo) están involucrados y hasta qué punto. Por ejemplo, en el caso de apache w/mod_wsgi como daemon. ¿Se manejaría cada solicitud por el mismo proceso? ¿Dónde se ejecuta python? – Pynchia