Передают ли сайты mod_wsgi (daemon) контент в apache для обслуживания клиента? - PullRequest
0 голосов
/ 02 апреля 2009

У меня Django развернут с mod_wsgi в режиме демона для apache2.2. Таким образом, после того, как Django произвел запись контента, он отдает все, что нужно Apache оттуда, чтобы он служил в своем оптимизированном великолепии, или Django все еще каким-то образом облагается налогом на этом этапе обслуживания?

Ответы [ 2 ]

3 голосов
/ 24 июня 2009

FWIW, в mod_wsgi 1.X, что позволило Apache по умолчанию выполнять буферизацию вывода. Это связано с тем, что спецификация WSGI эффективно запрещает буферизацию вывода базовым веб-сервером. Это связано с тем, что спецификация WSGI требует, чтобы данные возвращались в браузер после каждой строки, возвращаемой из итерируемого / генератора.

Другими словами, включение буферизации вывода было необязательным и скорее экспериментом, чем что-либо еще. Он был удален из-за того, что WSGI запретил его, и из-за того, что он на самом деле усложнил код mod_wsgi, когда было необходимо реализовать некоторые обходные пути для некорректного поведения в определенных версиях Apache.

3 голосов
/ 02 апреля 2009

Интерфейс WSGI сообщает (http://www.python.org/dev/peps/pep-0333/), что ваше приложение WSGI (в данном случае Django) вызывается и должно возвращать содержимое.

Джанго вызвал вашу функцию просмотра. Ваша функция просмотра вернула обработанный шаблон. Джанго вернул результаты рендеринга шаблона. И от вашего имени он вызвал start_response вызываемый.

Работая в обратном направлении еще один шаг, Apache вызвал mod_wsgi. mod_wsgi (следуя правилам WSGI) создал среду и передал ее Django вместе с start_response функцией вызова, которую Django может использовать.

Когда Джанго позвонил start_response, mod_wsgi был обязан собрать этот ответ и что-то с ним сделать. Он передает его Apache для загрузки в браузер.

Обратите внимание, что Django может быть сделано в довольно большой спешке. Апач, однако, застрял, просачивая начальную страницу в браузер. Затем браузер начинает запрашивать библиотеки .JS, файлы .CSS и все эти изображения. В идеале Apache обрабатывает все остальные последующие запросы.


Вы, возможно, спрашиваете "буфер mod_wsgi для меня?" Ответ зависит от версии. До 2.0 mod_wsgi мог накапливать буфер для вас. mod_wsgi 2.0 и выше не буферизует, он предполагает, что приложение способно буферизовать или имеет промежуточное программное обеспечение для буферизации.

http://code.google.com/p/modwsgi/wiki/ChangesInVersion0200

Как правило, ваш шаблон Django отображается в одном буфере и передается mod_wsgi одним куском, готовым для Apache, чтобы применить выходные фильтры и перенаправить его в браузер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...