16

为了帮助我进一步理解 WSGI,我正在寻找一个解释应用程序流程的图表,从 web 服务器(例如 apache)到许多中间件,再到“代码”(如print "hello world"位)。

我已经阅读了来自 wsgi.org 的有关 WSGI 的各种文章,但它对我来说仍然没有“点击”,至于图表,谷歌并没有带来任何有用的东西,除了django 的这个,虽然很有趣,但希望用户了解如何中间件链接等。

既然“一张图片值一千字”,那么有没有比这更简单/更低的图表?

4

3 回答 3

20

看着伊恩的花哨的管子我什么也没得到,我决定自己画一张图。我希望它能帮助人们理解 WSGI 流程是如何工作的。只要您有如何改进它的建议,我愿意修改它。它是使用LUCICHART webapp 创建的。您可以在这里找到原始图表和高质量的 PNG 在这里

WSGI 流

于 2011-10-09T20:34:34.760 回答
9

我喜欢Ian Bicking 的WSGI - A Series of Tubes中的图表

于 2009-08-20T06:44:58.913 回答
7

我不知道我是否可以提供您正在寻找的答案,但您链接到的图表不仅仅显示 wsgi。wsgi 层在图的第二行结束。之后,它是特定于应用程序的。

WSGI 更像是一个接口定义或契约,归结为您以某种方式提供了一个函数,该函数接受一个表示当前请求内容的字典(环境)。以及在您准备好开始响应时调用的函数(start_response)。

您调用的 start_response 方法需要一个 HTTP 状态代码('200 OK')和一个 HTTP 标头列表([('content-type', 'text/html')])。

def say_hello(envron={},start_response):
    start_response('200 OK', [('content-type', 'text/html')])
    return ["Hello from WSGI"]

我认为将您的网络服务器连接到您的 wsgi 应用程序是特定于您的网络服务器的,并且有关网络服务器如何到达环境字典的信息以及您的代码调用的回调是您可能不需要担心的网络服务器魔法. 只要您遵守协议,网络服务器就不需要关心您是如何到达构成您的应用程序响应的输出列表的。

粘贴文档帮助了我很多。您可能会发现它很有用。顺便说一句,Paste 是一堆有用的东西,可以帮助您利用 WSGI。而且这些文档非常有助于理解如何使用 WSGI 和扩展 Paste。

我知道你要一张图对不起。:(

于 2009-08-20T00:54:17.577 回答