WSGI

1.what is WSGI?

WSGI, Web Server Gateway Interface

如全称代表的那样,WSGI不是服务器,不是API,不是Python模块,更不是什么框架,而是一种服务器和客户端交互的

接口规范

WSGI里的组件分为『Server』,『Middleware』和『Application』三种,其中的『Middleware』是『设计模式』里的Decorator(装饰器)。

WSGI规范在PEP-333里讲得很详细:PEP 0333 -- Python Web Server Gateway Interface v1.0 ,但我觉得比理解规范更重要的,是理解其设计目的和工作原理。

WSGI规范写得有点绕,之所以绕, 主要原因可能是没有用『类型提示(Type Hints)』,如果用强类型OOP语言的那种『Interface』和『UML』来解释会清晰很多。下面我试试用这种带有『类型提示』的风格简单讲讲WSGI的原理。

设计模式:装饰者模式

装饰者模式( Decorator )

动态的给一个对象添加一些额外的功能

ComponentImpl 和 Decorator 类都实现了 IComponent 接口,不同的是 ComponentImpl 提供了具体实现,而 Decorator 是先聚合 ComponentImpl 接着在自己的实现方法即 operation() 方法中做些处理(即装饰)后再调用 ComponentImpl 对象的具体实现

装饰者模式.PNG

WSGI就是一个标准,WSGI server就是实现了这个标准的一个容器。这个标准类似于如下:

from wsgiref.simple_server import make_server

def simple_app(environ, start_response):
    status = '200 OK'
    response_headers = [('Content-type', 'text/plain')]
    start_response(status, response_headers)
    return [u"This is hello wsgi app".encode('utf8')]

httpd = make_server('', 8000, simple_app)
print "Serving on port 8000..."
httpd.serve_forever()

web应用开发者只要遵从WSGI的标准,编写simple_app就可以实现自己的应用了。标准很简单:第一个environ参数表明了所有request相关的环境变量,第二个start_response用于写入一些response的返回头的信息,然后再return返回的response的数据就行了。这个就是所有的WSGI标准了。

参考链接:

https://www.zhihu.com/question/19998865 (如何理解CGI,WSGI-----知乎)

http://www.jianshu.com/p/bdf65e4afbb0 (14种常用的设计模式)

http://blog.csdn.net/sraing/article/details/8455242WSGI的理解(转载)

results matching ""

    No results matching ""