¿Cómo están conectados WSGI, CGI y los marcos?
Apache escucha en el puerto 80. Se recibe una solicitud HTTP. Analiza la solicitud para encontrar una manera de responder. Apache tiene MUCHAS opciones para responder. Una forma de responder es usar CGI para ejecutar un script. Otra forma de responder es simplemente servir un archivo.
En el caso de CGI, Apache prepara un entorno e invoca el script a través del protocolo CGI. Esta es una situación estándar de fork/exec de Unix: el subproceso CGI hereda un entorno de sistema operativo que incluye socket y stdout. El subproceso CGI escribe una respuesta, que se remonta a Apache; Apache envía esta respuesta al navegador.
CGI es primitivo y molesto. Principalmente porque divide un subproceso para cada solicitud, y el subproceso debe salir o cerrar stdout y stderr para indicar el final de la respuesta.
WSGI es una interfaz que se basa en el patrón de diseño CGI. No es necesariamente CGI: no tiene que bifurcar un subproceso para cada solicitud. Puede ser CGI, pero no tiene que serlo.
WSGI se agrega al patrón de diseño CGI de varias maneras importantes. Analiza los encabezados de solicitud HTTP por usted y los agrega al entorno. Suministra cualquier entrada orientada a POST como un objeto similar a un archivo en el entorno. También le proporciona una función que formulará la respuesta, lo que le evitará muchos detalles de formato.
¿Qué necesito saber/instalar/hacer si deseo ejecutar un marco web (por ejemplo, web).py o cherrypy) en mi configuración básica de CGI?
Recuerde que bifurcar un subproceso es costoso. Hay dos formas de evitar esto.
Embeddedmod_wsgi
o mod_python
incrusta Python dentro Apache; ningún proceso es bifurcado Apache ejecuta la aplicación Django directamente.
Daemonmod_wsgi
o mod_fastcgi
permite Apache interactuar con un demonio separado (o "proceso de larga duración"), utilizando el protocolo WSGI. Usted inicia su proceso Django de larga duración, luego configura el mod_fastcgi de Apache para comunicarse con este proceso.
Tenga en cuenta que mod_wsgi
puede trabajar en cualquiera de los modos: incrustado o demonio.
Cuando lee en mod_fastcgi, verá que Django usa para crear una interfaz compatible con WSGI a partir de la información proporcionada por mod_fastcgi. La tubería funciona así.
Apache -> mod_fastcgi -> FLUP (via FastCGI protocol) -> Django (via WSGI protocol)
Django tiene varios "django.core.handlers" para las distintas interfaces.
Para mod_fastcgi, Django proporciona un manage.py runfcgi
que integra FLUP y el controlador.
Para mod_wsgi, hay un controlador de núcleo para esto.
¿Cómo instalar la compatibilidad con WSGI?
Siga estas instrucciones.
https://code.google.com/archive/p/modwsgi/wikis/IntegrationWithDjango.wiki
Para el fondo ver este
http://docs.djangoproject.com/en/dev/howto/deployment/#howto-deployment-index
No puedo instalar mod_wsgi porque estoy en hosting compartido. Todo lo que tengo es soporte fcgi. ¿Cómo puedo ejecutar aplicaciones WSGI a través de él? –
+1 Es una excelente respuesta y responde muchas (pero no todas) las preguntas que tengo en mente. Esta respuesta aún no está completa. Explicó bien sobre CGI y WSGI, pero ¿cuál es la relación y las diferencias entre FASTCGI y WSGI? ¿Cual es mejor? ¿Cómo trabajan? ¿Cómo entró mod_python en la imagen? – claws
@claws: Por favor, no pregunte cuál es "mejor". La pregunta es tonta Mejor en qué? Más barato? ¿Más rápido? Usa menos memoria? Involucra la mayor parte de la programación? Casi todo el mundo usa mod_wsgi porque hace todo. –