为四川人民祈祷! www.onefoundation.cn

WSGI与Apache,无关

理论上说来,两者应该完全没有关系。WSGI应用程序需要一个WSGIServer,当然这只是一个标准,实际上的实现可能会有很多。当然,如果你连WSGI是什么都完全搞不清楚,建议你先看看PEP333

WSGIClient很容易实现,简单到只需要一个函数就可以搞定,比“hello,java”更加容易的明白
def simple_app(environ, start_response):

status = '200 OK'
response_headers = [('Content-type','text/plain')]
start_response(status, response_headers)
return ['Hello world!\n']

我们这里拿出来玩的WSGIServer是框架CheryPy中的一部分,它可以被剥离出来单独使用,源代码的开头注释部分告诉你怎么实现一个标准的"Hello,WSGI"。这样一个服务器在开发时候做测试是完全没有问题的,但是要放到互联网上被成千上万的流量考验,估计没有人敢这么做。

所以我们得找个坚固的东西,Apache是选择之一,是惯性的选择,虽然不够创新,但是还是很多人这么选择了。但是我们之前就说过了,WSGI和Apache几乎什么关系都没有,一个是Python语言的接口,另外一个是C语言的服务器。

CGI是最通用的做法,任何语言都可以这样做。面对请求,Apache可以把请求转换成一个进程的启动,把参数作为环境变量,把标准输出重定向为网页上的内容。

写一个WSGI2CGI的程序看来可行,但是CGI的效率不高,已经是远近闻名的事情了。

所以为了要支持新的功能,Apache需要写module。

Module是Apache扩展自己的主要手段,module就是一个动态连接库,使用C写成。但是,我们不需要自己写,因为已经有现成的给我们用了,而且还不只一个。他们是mod_python和mod_fcgi,还有mod_scgi

最有名的就是FastCGI,根据传言效率也比mod_python好一些,我自己的网站也跑在FastCGI上。FastCGI的标准也支持众多的语言,WSGI2FCGI的库也有一些现成的可以使用了。

...
其实这不是How to式的文章,我需要阐明的是:

写web程序的时候,坚持WSGI的标准(其实WSGIClient本身很容易),或者采用使用WSGI标准的框架,就可以在部署的时候充分利用现有的很多便利的工具。如果是Java,因为Servlet是私有的标准,所以只能被部署在Java应用服务器上。

WSGI与Apache本身是没有关系的,但是很多人对Apache感情深厚,在学习WSGI的时候总是心系Apache,很好奇这样一个协议是如何与我们现在的web服务器结合起来的。这样反倒不容易理解WSGI标准本身。或许我们应该考虑的是WSGI是怎么与FastCGI/SCGI联系起来的

除了WSGI Client和Server以外,WSGI还有对Middleware的定义,以后再详细讨论
 
by kernel1983
Comments »
  1. 2007-06-14 18:02
    xrtest
     
  2. 2007-06-14 03:31
    xrtest
     
  3. 2007-06-8 21:32
    Shalom
  4. 2007-06-1 16:10
    Moja terma nemoe zakluchenj. Confucius Hed.
  5. 2007-05-30 16:37
    Hellouwn - this is just a testing, don't worry about it
Leave a Comment:
code:443