我已经在apache2.2的守护进程模式下使用mod_wsgi部署了Django。那么,在Django大量生产内容之后,它是将所有内容都交给apache,让它在优化后的辉煌中得到服务,还是Django在这个服务步骤中仍然以某种方式征税?
发布于 2009-04-02 16:44:42
WSGI接口声明(http://www.python.org/dev/peps/pep-0333/)您的WSGI应用程序(在本例中是Django)被调用,并且必须返回内容。
Django调用了你的视图函数。您的视图函数返回了呈现的模板。Django返回了渲染模板的结果。并且,它代表您调用了start_response callable。
在另一个步骤中,Apache调用了mod_wsgi。mod_wsgi (遵循WSGI规则)创建了这个环境,并将其交给了Django,以及Django可以使用的start_response可调用程序。
当Django调用start_response时,mod_wsgi有责任收集响应并对其进行处理。它将其传递给Apache,然后再将其提供给浏览器。
请注意,Django可能会在相当短的时间内完成。然而,Apache被困在将初始页面向下滴流到浏览器中。然后,浏览器开始询问.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应用输出过滤器并将其传递到浏览器。
发布于 2009-06-24 12:19:37
默认情况下,mod_wsgi 1.X中的FWIW允许Apache执行输出缓冲。这是因为WSGI规范有效地禁止了底层web服务器的输出缓冲。这是因为WSGI规范要求在每个字符串从迭代器/生成器返回之后,将数据刷新回浏览器。
换句话说,启用输出缓冲是可选的,更多的是一种实验。它被移除是因为WSGI禁止它,并且因为当有必要为某些Apache版本中的不正确行为实现一些工作时,它实际上会使mod_wsgi代码变得复杂。
https://stackoverflow.com/questions/710535
复制相似问题