抄次网上,有关cgi,wsgi

来源:互联网 发布:c语言中的数据类型 编辑:程序博客网 时间:2024/06/04 09:22
1、CGI是一种为用户动态提供所需数据的设计思想,它有很多各种不同语言的实现。

2、WSGI是Python对CGI进行的一种包装,核心使用Python实现,具体实现通常来说也需要使用Python,目前Django、Google webapp框架都实现了WS


cgi是通用网关接口,是连接web服务器和应用程序的接口。
web服务器负责接收http请求,但是http请求从request到response的过程需要有应用程序的逻辑处理,web服务器一般是使用C写的,比如nginx,apache。而应用程序则是由各种语言编写,比如php,java,python等。这两种语言要进行交互就需要有个协议进行规定,而cgi就是这么个网关协议。
拿nginx+fastcgi+php为例子,nginx里面的fastcgi模块实现cgi的客户端,php的cgi-sapi实现cgi的服务端。
WSGI就是Python的CGI包装,相对于Fastcgi是PHP的CGI包装

同意,就是相当于说nginx作为server 通过自己的cgi模块(作为CGI客户端,从访问应用服务的角度)调用 应用服务的cgi接口(作为CGI服务端,脚本语言实现的应用,php,python等) 

WSGI是服务器程序(nginx、apache等)与后端应用进行交互的协议,即一组接口而已。

最开始的时候,可以直接从浏览器访问.cgi脚本,提供动态服务的url地址基本上对应一个脚本文件,访问这个url,服务器就执行一次这个脚本。然后,后来就又进行了抽象和分层,让服务器程序通过约定的协议(wsgi等)访问服务器上的应用程序实现的接口完成服务,这时候浏览器访问的url已经不对应服务器上真正的脚本程序了,而是由server端代为间接调用然后返回结果。



CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。 CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。如php,perl,tcl等。


FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute 模式)。它还支持分布式的运算, 即 FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。

FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。众所周知,CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性、Fail- Over特性等等。


WSGI 的全称为: Python Web Server Gateway Interface v1.0 (Python Web 服务器网关接口),
它是 Python 应用程序和 WEB 服务器之间的一种接口。
它的作用,类似于FCGI 或 FASTCGI 之类的协议的作用
WSGI 的目标,是要建立一个简单的普遍适用的服务器与 WEB 框架之间的接口。

Flup 就是使用 Python 语言对 WSGI 的一种实现,是可以用于 Python 的应用开发中的一种工具或者说是一种库。

Spawn-fcgi是一个小程序,这个程序的作用是管理fast-cgi进程,那么管理wsgi进程也是没有问题的,功能和php-fpm类似。

故,简单地说,WSGI和FastCGI都是一种CGI,用于连接WEB服务器与应用程序,而WSGI专指Python应用程序。而flup是WSGI的一种实现,Spawn-fcgi是用于管理flup进程的一个工具,可以启动多个wsgi进程,并管理它们。


0 0