0

wsgi_百度百科

 2 years ago
source link: https://baike.baidu.com/item/wsgi/3381529?fr=aladdin
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

wsgi_百度百科

声明:百科词条人人可编辑,词条创建和修改均免费,绝不存在官方及代理商付费代编,请勿上当受骗。详情>>

播报 编辑 锁定 讨论 上传视频 特型编辑

Web服务器网关接口Python Web Server Gateway Interface,缩写为WSGI)是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口。自从WSGI被开发出来以后,许多其它语言中也出现了类似接口。

中文名 Web服务器网关接口 领    域 计算机网络 特    点

语    种 Python 全    称 Python Web Server Gateway Interface 释    义 Web服务器Web应用程序框架之间的一种简单而通用的接口
PythonWeb服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是Python应用程序或框架和Web服务器之间的一种接口,已经被广泛接受, 它已基本达成它的可移植性方面的目标。
WSGI 没有官方的实现, 因为WSGI更像一个协议. 只要遵照这些协议,WSGI应用(Application)都可以在任何服务器(Server)上运行, 反之亦然。
WSGI标准在 PEP 333 [1] 中定义并被许多框架实现,其中包括现广泛使用的django框架。
以前,如何选择合适的Web应用程序框架成为困扰Python初学者的一个问题,这是因为,一般而言,Web应用框架的选择将限制可用的Web服务器的选择,反之亦然。那时的Python应用程序通常是为CGIFastCGImod_python中的一个而设计,甚至是为特定Web服务器的自定义的API接口而设计的。
WSGI(有时发音作'wiz-gee')是作为Web服务器与Web应用程序或应用框架之间的一种低级别的接口,以提升可移植Web应用开发的共同点。WSGI是基于现存的CGI标准而设计的 [2] 。
Python Paste - WSGI底层工具集. 包括多线程, SSL和 基于Cookies, sessions等的验证(authentication)库. 可以用Paste方便地搭建自己的Web框架。
WSGI:Python Web Server Gateway Interface v1.0
它是 PEP3333中定义的(PEP3333的目标建立一个简单的普遍适用的服务器与Web框架之间的接口)
WSGI是Python应用程序或框架和Web服务器之间的一种接口
WSGI被广泛接受, 已基本达成它了可移植性方面的目标
在Guido的 Blog 中反复提及, 个人认为WSGI是Python Web方面最Pythonic的
类似于Java中的"servlet" API。 [3]
WSGI区分为两个部分:一为“服务器”或“网关”,另一为“应用程序”或“应用框架”。在处理一个WSGI请求时,服务器会为应用程序提供环境信息及一个回调函数(Callback Function)。当应用程序完成处理请求后,透过前述的回调函数,将结果回传给服务器。
所谓的WSGI中间件同时实现了API的两方,因此可以在WSGI服务器和WSGI应用之间起调解作用:从Web服务器的角度来说,中间件扮演应用程序,而从应用程序的角度来说,中间件扮演服务器。“中间件”组件可以执行以下功能:
  • 重写环境变量后,根据目标URL,将请求消息路由到不同的应用对象。
  • 允许在一个进程中同时运行多个应用程序或应用框架。
  • 负载均衡和远程处理,通过在网络上转发请求和响应消息。
  • 进行内容后处理,例如应用XSLT样式表。
Python语言写的一个符合WSGI的“Hello World”应用程序如下所示:
def app(environ, start_response): start_response('200 OK', [('Content-Type', 'text/plain')]) yield "Hello world!\n"
  • 第一行定义了一个名为 app 的 callable,接受两个参数,environ 和 start_response,environ 是一个字典包含了 CGI 中的环境变量。
  • 第二行调用了start_response,状态指定为“200 OK”,消息头指定为内容类型是“text/plain”。start_response 也是一个 callable,接受两个必须的参数,status(HTTP 状态)和 response_headers(响应消息的头)。
  • 第三行将响应消息的消息体返回。

调用一个应用程序的示例

编辑 播报
def call_application(app, environ):调用一个程序并获取它的应答消息的例子如下所示:
body = []    status_headers = [None, None]    def start_response(status, headers):        status_headers[:] = [status, headers]        return body.append    app_iter = app(environ, start_response)    try:        for item in app_iter:            body.append(item)    finally:        if hasattr(app_iter, 'close'):            app_iter.close()    return status_headers[0], 
status_headers[1], ''.join(body)status, headers, body = call_application(app, {...environ...})

WSGI兼容的应用和框架

编辑 播报
支持WSGI的Web应用框架有很多:
  • 2003年: 原初的Python版本
  • 2007年:RackRuby版本
  • 2008年: LuaWSAPI,Lua版本
  • 2009年:JSGI,JavaScript版本
  • 2009年:PSGI,Perl版本
词条图册 更多图册

参考资料

  • 1.

    pep-0333  .python[引用日期2017-02-12]

  • 2.

    宋凯, 严丽平, 甘岚. 嵌入式Web服务器的设计与实现[J]. 计算机工程与设计, 2009, 30(4):808-810.

  • 3.

    Python的Web服务网关接口 WSGI   .开源社区网[引用日期2012-09-15]


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK