Как связаны WSGI, CGI и фреймворки?
Apache прослушивает порт 80. Он получает HTTP-запрос. Он анализирует запрос, чтобы найти способ ответить. У Apache есть МНОГО вариантов ответа. Один из способов ответить - использовать CGI для запуска сценария. Другой способ ответить - просто передать файл.
В случае CGI Apache подготавливает среду и вызывает сценарий через протокол CGI. Это стандартная ситуация Unix Fork / Exec - подпроцесс CGI наследует среду ОС, включая сокет и стандартный вывод. Подпроцесс CGI пишет ответ, который возвращается в Apache; Apache отправляет этот ответ браузеру.
CGI примитивен и раздражает. В основном потому, что он разветвляет подпроцесс для каждого запроса, а подпроцесс должен выйти или закрыть stdout и stderr, чтобы обозначить конец ответа.
WSGI - это интерфейс, основанный на шаблоне проектирования CGI. Это не обязательно CGI - ему не нужно создавать ответвление подпроцесса для каждого запроса. Это может быть CGI, но не обязательно.
WSGI добавляет к шаблону проектирования CGI несколько важных способов. Он анализирует заголовки HTTP-запроса и добавляет их в среду. Он предоставляет любой POST-ориентированный ввод как файловый объект в среде. Он также предоставляет вам функцию, которая формулирует ответ, избавляя вас от множества деталей форматирования.
Что мне нужно знать / установить / сделать, если я хочу запустить веб-фреймворк (например, web.py или cherrypy) в моей базовой конфигурации CGI?
Напомним, что разветвление подпроцесса обходится дорого. Есть два способа обойти это.
Встроенный mod_wsgi
или mod_python
встраивает Python в Apache; ни один процесс не разветвляется. Apache запускает приложение Django напрямую.
Демон mod_wsgi
или mod_fastcgi
позволяет Apache взаимодействовать с отдельным демоном (или «длительно выполняющимся процессом»), используя протокол WSGI. Вы запускаете свой длительный процесс Django, а затем настраиваете mod_fastcgi Apache для взаимодействия с этим процессом.
Обратите внимание, что mod_wsgi
может работать в любом режиме: встроенный или демон.
Прочитав mod_fastcgi, вы увидите, что Django использует flup для создания WSGI- совместимый интерфейс из информации, предоставленной mod_fastcgi. Трубопровод работает так.
Apache -> mod_fastcgi -> FLUP (via FastCGI protocol) -> Django (via WSGI protocol)
В Django есть несколько «django.core.handler» для различных интерфейсов.
Для mod_fastcgi Django предоставляет manage.py runfcgi
, который объединяет FLUP и обработчик.
Для mod_wsgi есть основной обработчик.
Как установить поддержку WSGI?
Следуйте этим инструкциям.
https://code.google.com/archive/p/modwsgi/wikis/IntegrationWithDjango.wiki
Для справки см. Это
http://docs.djangoproject.com/en/dev/howto/deployment/#howto-deployment-index
person
S.Lott
schedule
06.02.2009