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

2024-05-17 13:38:31 发布

您现在位置:Python中文网/ 问答频道 /正文

正如我在标题上所说的,我现在对他们的基本理解感到很不舒服。

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

它是用C语言编写的。

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

下面是我想知道的。

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

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

有谁能解释一下mod_wsgi和werkzeug之间的区别吗?

mod_wsgi和werkzeug从web服务器的角度复制了一些特性。


Tags: in规范服务器webmod标题wsgimake
2条回答

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

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

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

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应用程序框架:Pyramid/Pylons、Flask、Bottle、Django、CherryPy等,它们都实现了WSGI规范,这是用Python构建Web应用程序的事实标准(http://en.wikipedia.org/wiki/Web_Server_Gateway_Interface

大多数web应用程序框架都附带了一个仅用于调试或支持生产的web服务器。当您有一个WSGI应用程序时,您可以通过库的应用程序、通过Apache通过mod_wsgi提供服务,或者使用像uWSGIgunicornfapwstwisted这样的“纯”WSGI服务器。

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

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

话虽如此,为了明确回答您的问题,请阅读本文档第-http://werkzeug.pocoo.org/docs/serving/页的第一段:

There are many ways to serve a WSGI application. While you’re developing it, you usually don’t want to have a full-blown webserver like Apache up and running, but instead a simple standalone one. Because of that Werkzeug comes with a builtin development server.

出于开发原因,或者在流量非常低的站点上,您可以只使用Werkzeug服务器。如果您部署的应用程序将获得合理的通信量,则需要更健壮的应用程序。

modòu wsgi或uWSGI复制了Werkzeug的服务特性,但它们之所以这样做是因为它们可以做得更好——更快的响应时间、更低的内存、更好的并发性、更稳定等。Werkzeug服务器对于许多用途来说“足够好”,但它不是服务于wsgi兼容应用程序的“最佳方式”。

相关问题 更多 >