mod_wsgi(守护程序)站点是否将内容移交给apache以便为客户端提供服务?

时间:2009-04-02 16:36:20

标签: django optimization apache2 mod-wsgi

我在Djache2.2中以守护进程模式部署了mod_wsgi的Django。因此,在Django制作了内容之后,它是否会将所有内容交给apache,以便在优化的荣耀中提供服务,或者Django在这个服务步骤中是否还有某种方式征税?

2 个答案:

答案 0 :(得分:3)

WSGI接口说(http://www.python.org/dev/peps/pep-0333/)您的WSGI应用程序(在本例中为Django)被调用,并且必须返回内容。

Django调用了你的视图功能。您的视图函数返回了渲染模板。 Django返回了渲染模板的结果。而且,代表您调用start_response可调用的。

向后退一步,Apache调用了mod_wsgi。 mod_wsgi(遵循WSGI规则)创建了环境并将其传递给Django,以及Django可以使用的start_response可调用。

当Django调用start_response时,mod_wsgi有义务收集该响应并对其执行某些操作。它将它交给Apache以便下载到浏览器。

请注意,Django可能会非常着急。然而,Apache正在将初始页面涓涓细流到浏览器中。然后,浏览器开始询问.JS库,.CSS文件和所有这些图像。理想情况下,Apache处理所有其余的后续请求。


你可能会问“为我做mod_wsgi缓冲吗?”答案因版本而异。 Pre 2.0 mod_wsgi可以为你累积一个缓冲区。 mod_wsgi 2.0及以上版本不缓冲,它假定应用程序能够缓冲,或者包含用于缓冲的中间件。

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

通常,您的Django模板在一个缓冲区中呈现并一次性传递给mod_wsgi,为Apache准备应用输出过滤器并将其细化到浏览器。

答案 1 :(得分:3)

FWIW,在mod_wsgi 1.X中,默认情况下允许Apache执行输出缓冲。这是因为WSGI规范有效地禁止底层Web服务器的输出缓冲。这是因为WSGI规范要求在从iterable / generator返回的每个字符串之后将数据刷新回浏览器。

换句话说,启用输出缓冲是可选的,而不是其他任何实验。它已被删除,因为WSGI禁止它,并且因为当某些Apache版本中的错误行为需要实现某些解决方法时,它实际上使mod_wsgi代码复杂化。