回答
WSGI在Web服务器启动时运行Python解释器,作为Web服务器进程的一部分(嵌入模式)或作为单独的进程(守护进程模式),并将脚本加载到其中。每个请求都会在被调用的脚本中产生一个特定的函数,请求环境作为参数传递给函数。
CGI将脚本作为单独的进程运行每个请求,并使用环境变量,stdin和stdout与其“通信”。
WSGI!= mod_wsgi。你的语言表明你的意思是mod_wsgi,它是WSGI的一个实现。 WSGI本身仅仅是一个规范,可以用许多不同的方式来实现,包括在CGI之上。 – 2011-02-08 07:39:53
@Graham:你是说没有其他的WSGI容器支持在这些模式下运行WSGI应用程序? – 2011-02-08 07:45:41
从技术上讲,人们可以说有比这两个更微妙的变化,至少在过程如何开始或在嵌入式系统中如何激活代码。所以人们必须小心将事物概括为这两类。在总体水平上,你可能会说你有什么,但是如果你想深入研究的话,那还有很多。 – 2011-02-09 01:43:29
CGI和WSGI都定义了程序可以用来处理Web请求的标准接口。 CGI接口的级别低于WSGI,并且涉及服务器设置包含来自HTTP请求的数据的环境变量,程序返回的格式与HTTP服务器的响应非常相似。另一方面,WSGI是一个特定于Python的略高级接口,它允许程序员编写与服务器无关并且可以封装在其他WSGI应用程序(中间件)中的应用程序。
从一个完全的后撤步点,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 ....问别人:-)
如果你是在这个空间中的所有条款不清楚,让我们面对它,这是一个令人困惑的缩写载货一个,还有一个很好的背景阅读器以official python HOWTO的形式讨论CGI与FastCGI vs. WSGI等。我希望我会先读它。
- 1. 简单英语中的JavaBeans是什么?
- 2. 什么是单身人士,用简单的英语?
- 3. 什么是用简单英语解释的参数化查询?
- 4. LINQ用简单的英语
- 5. 这段代码在简单英语中意味着什么?
- 6. 什么是最简单/最轻的WSGI框架?
- 7. CGI,WSGI,servlets和类似概念有什么大不了的?
- 8. 什么是CGI和什么是CGI脚本?
- 9. 为什么CurrentUICulture.DisplayName说“英语(美国)”而不是“英语(英国)”?
- 10. content_tag:简单英语中的tr块
- 11. Jenkins的OneOffExecutor简单的英文解释是什么?
- 12. Linq查询用简单的英语
- 13. 什么是英语单词的好散列函数?
- 14. 什么是最简单的解释什么是Hadoop和Map/Reduce?
- 15. 金字塔资源:简单英语
- 16. 什么是git中的简单合并?
- 17. 什么是/ cdn-cgi/pe/bag2?
- 18. XAML中的WPF本地化,简单,简单和优雅的方式是什么?
- 19. 什么是最简单和最简约的java xml api?
- 20. 这个简单的SQL语句是什么意思?
- 21. 什么是用于创建图形的简单语言?
- 22. 有人解释DSL语言创建的机制“简单英语”
- 23. 什么是支持模板和上下文机制的最简单的语言?
- 24. asp.net中displayfor和displayname的简单解释是什么?
- 25. 在C++中引用对象的适当的英语术语是什么?
- 26. 检查单词是否是英语Python
- 27. wsgi,python_wsgi,wsgi服务器和mod_wsgi有什么区别?
- 28. scgi和wsgi有什么区别?
- 29. 什么是简单的ParentAdapter实现?
- 30. 什么是简单的Web服务
http://stackoverflow.com/questions/219110/how-python-web-frameworks-wsgi-and-cgi-fit-together – 2011-02-08 04:44:15