你能解释一下mod_wsgi和werkzeug之间更详细的区别吗?(SOS新手)



正如我在标题中所说,我目前对它们的基本理解感到非常不舒服。

据我所知,mod_wsgi实现了可以在Apache web服务器下运行的wsgi规范。

它是用C语言编码的。

另一个是werkzeug,它是一种具有有用实用程序的工具包。我还回顾了werkzeug可以运行在其源代码中实现的简单服务(serving.py中的make_server)。我知道werkzeog有有用的功能和简单的服务器功能。

我想知道的如下。

在Apache web服务器下使用基于werkzeug的类Flask框架时,mod_wsgi到底做了什么?

werkzeug还具有基本的http服务器功能,不需要支持mod_wsgi。

有人能解释mod_wsgi和werkzeug之间的区别吗?

从web服务器的角度来看,modwsgi和werkzeug具有重复的特性。

WSGI代表Web服务器网关接口,(主要)由PEP 333在http://www.python.org/dev/peps/pep-0333/。

Python社区致力于为web服务器建立一个与Python应用程序对话的标准机制。

理论上,任何符合wsgi的服务器(或现有web服务器的扩展)都应该能够加载和运行任何符合wski的应用程序。

werkzeug是一个web应用程序框架,可以在兼容的WSGI服务器(如Apache+mod_WSGI)下运行。它还包含一个可用于开发的内置开发服务器。


WSGI一开始可能非常令人困惑,但实际上非常简单。WSGI规范要求您的python应用程序执行以下操作:

  1. 定义一个名为application的可调用对象
  2. 所述可调用应接受2个参数:(environstart_response)
  3. environ是环境变量词典
  4. start_response是一个可调用的,需要调用它来启动响应

一旦调用application,它就会处理请求,构建输出,并:

  1. 调用start_response('200 OK', Headers)
  2. return [content]

一个简单的WSGI应用程序可能看起来像这样:

def application(environ, start_response):
status = '200 OK'
output = 'Hello World!'
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]

强烈建议您使用现有的WSGI框架,因为在解析HTTP请求、处理文件上传、编码字符等方面有很多细节

看看瓶子、烧瓶、werkzeug、AppStruct等…

mod_wsgi是一个兼容wsgi的python模块,用于桥接python和apache。它允许您在apache下运行按照wsgi规范编码的应用程序。

werkzeug是一个wsgi实用程序库,用于构建符合wsgi的应用程序。它附带了一个开发服务器。

有一些Python Web应用程序框架:PyramidPylons、Flask、Bottle、Django、CherryPy等。它们都实现了WSGI规范,这是用Python构建Web应用程序的事实标准(http://en.wikipedia.org/wiki/Web_Server_Gateway_Interface)

大多数web应用程序框架都附带了仅调试或可生产的web服务器。当您有WSGI应用程序时,您可以通过库的应用程序、通过mod_wsgi通过Apache或使用"纯"WSGI服务器(如uWSGIgunicornfapwstwisted)提供服务。

我认识的大多数人都会部署这样的wsgi应用程序:

  • 像nginx这样的轻量级服务器在port80上侦听
  • 轻量级服务器本身提供静态文件
  • 轻量级服务器将uWSGI请求代理到另一个服务器,该服务器通常是uWSGI,但有时是apache+mod_wsgi或其他服务器。根据设置,代理可以是http代理,也可以直接或通过套接字连接到uWSGI服务器

话虽如此,要具体回答您的问题,请阅读本文档页面的第一段-http://werkzeug.pocoo.org/docs/serving/:

有许多方法可以为WSGI应用程序提供服务。在开发它的过程中,您通常不希望有一个像Apache这样成熟的Web服务器,而是一个简单的独立服务器。因此,Werkzeug附带了一个内置的开发服务器。

出于开发原因,或者在流量非常低的网站上,您可以只使用Werkzeug服务器。如果您正在部署一个能够获得合理流量的应用程序,那么您将需要更健壮的应用程序。

mod_wsgi或uWSGI复制了Werkzeug的服务功能,但它们这样做是因为它们可以做得更好——更快的响应时间、更低的内存、更好的并发性、更稳定等等。Werkzeugserver对于许多用途来说"足够好",但它不是服务于符合wsgi的应用程序的"最佳方式"。

最新更新