2011-02-08 42 views
74

我每次读WSGI或CGI时都会畏缩。我已经尝试过阅读它,但没有真正卡住。简单英语中的WSGI和CGI是什么?

它真的是纯英语吗?

它只是管理请求到终端并重定向输出?

+2

http://stackoverflow.com/questions/219110/how-python-web-frameworks-wsgi-and-cgi-fit-together – 2011-02-08 04:44:15

回答

43

WSGI在Web服务器启动时运行Python解释器,作为Web服务器进程的一部分(嵌入模式)或作为单独的进程(守护进程模式),并将脚本加载到其中。每个请求都会在被调用的脚本中产生一个特定的函数,请求环境作为参数传递给函数。

CGI将脚本作为单独的进程运行每个请求,并使用环境变量,stdin和stdout与其“通信”。

+9

WSGI!= mod_wsgi。你的语言表明你的意思是mod_wsgi,它是WSGI的一个实现。 WSGI本身仅仅是一个规范,可以用许多不同的方式来实现,包括在CGI之上。 – 2011-02-08 07:39:53

+0

@Graham:你是说没有其他的WSGI容器支持在这些模式下运行WSGI应用程序? – 2011-02-08 07:45:41

+2

从技术上讲,人们可以说有比这两个更微妙的变化,至少在过程如何开始或在嵌入式系统中如何激活代码。所以人们必须小心将事物概括为这两类。在总体水平上,你可能会说你有什么,但是如果你想深入研究的话,那还有很多。 – 2011-02-09 01:43:29

13

CGI和WSGI都定义了程序可以用来处理Web请求的标准接口。 CGI接口的级别低于WSGI,并且涉及服务器设置包含来自HTTP请求的数据的环境变量,程序返回的格式与HTTP服务器的响应非常相似。另一方面,WSGI是一个特定于Python的略高级接口,它允许程序员编写与服务器无关并且可以封装在其他WSGI应用程序(中间件)中的应用程序。

173

从一个完全的后撤步点,Blankman,这里是我的“介绍页面” Web服务网关接口:

第一部分:WEB服务器

Web服务器成为了回应。他们坐下来,耐心等待,然后突然间没有任何警告:

  • 客户端进程发送请求。客户端进程可能是一个Web服务器,一个机器人,一个移动应用程序,无论如何。这是简单的“客户端”
  • Web服务器接收到这个请求
  • 故意咕哝各种各样的事情发生(见下文)
  • Web服务器发回的东西给客户
  • Web服务器再次围坐

Web服务器(至少,更好的)非常擅长这一点。他们根据需求扩大和缩小处理范围,他们可靠地与极其客气的客户进行交谈,而不必担心这些问题。他们只是继续服务。

这是我的观点:web服务器就是这样:服务器。他们对内容一无所知,对用户一无所知,除了如何等待以及如何可靠地回复之外,其他都没有。

您选择的网络服务器应该反映您的传送偏好,而不是您的软件。你的网络服务器应该负责服务,而不是处理或逻辑的东西。

第二部分:(Python)的软件

软件没有身边坐下。软件仅在执行时存在。当涉及到其环境的意外变化(文件不在预期的位置,参数被重命名等)时,软件并不是非常适应。虽然优化应该是您设计的核心宗旨(当然),但软件本身并不会优化。开发者优化。软件执行。软件完成了上面“故意嘟'”部分的所有内容。可能是任何事情。

您的选择或软件设计应反映您的应用程序,您选择的功能,而不是您选择的Web服务器。

这就是传统的“编译”语言到Web服务器的方法变得痛苦的地方。您最终将代码放入您的应用程序中以应对物理服务器环境,或者至少被迫选择适当的'wrapper'库以在运行时包含,以给出Web服务器上统一的错觉。

那么什么是WSGI?

那么,最后,什么是WSGI? WSGI是的一套规则,分为两部分。它们的编写方式可以将它们整合到任何欢迎整合的环境中。

第一部分是为Web服务器端编写的,它说:“好吧,如果你想要处理WSGI应用程序,下面是加载时软件的思维方式。应用程序,这里是你可以期待每个应用程序都具有的接口(布局),而且,如果出现任何问题,应用程序将如何思考以及如何预期其行为。“

第二部分是为Python应用程序软件编写的,它说:“好的,如果你想要处理WSGI服务器,下面是服务器在与你联系时的思维方式。服务器,这里是你可以期待每个服务器都有的接口(布局),而且,如果出现任何问题,这里是你应该如何行动,这里是你应该告诉服务器。

所以你有它 - 服务器将是服务器和软件将是软件,这是一种方式,他们可以相处得很好,而不必为另一方的细节做任何补贴。这是WSGI。

mod_wsgi的,而另一方面,是Apache的一个插件,让它跟WSGI兼容的软件,换句话说,mod_wsgi的是实现 - 在Apache中 - 的规则手册第一部分上述规则。

至于CGI ....问别人:-)

12

如果你是在这个空间中的所有条款不清楚,让我们面对它,这是一个令人困惑的缩写载货一个,还有一个很好的背景阅读器以official python HOWTO的形式讨论CGI与FastCGI vs. WSGI等。我希望我会先读它。

相关问题