2012-08-05 96 views
1

我有一個很奇怪的問題。我將Lighttpd配置爲通過/測試到fastcgi後端。 只是在配置用Lighttpd設置gevent,奇怪的東西

fastcgi.server = ("/test" => 
    ("127.0.0.1" => 
    (
     "host" => "127.0.0.1", 
     "port" => 7101, 
     "docroot" => "/", 
     "check-local" => "disable" 
    ) 
) 
) 

加入這個現在,當我開始flup例子,並創下127.0.0.1:80/test一切工作正常。測試uWSGI,仍然很好。

flup例如:

#!/usr/bin/env python 
from flup.server.fcgi import WSGIServer 

def myapp(environ, start_response): 
    start_response('200 OK', [('Content-Type', 'text/plain')]) 
    return ['Hello World'] 

WSGIServer(myapp, bindAddress = ('127.0.0.1',7101)).run() 

現在,唯一的問題是,當我開始GEVENT將無法正常工作。 Lighttpd mod_fastcgi說後端剛被阻塞。

有趣的是,當我改變處理程序只返回字符串,原因WSGI需要迭代,並從我的瀏覽器,它按預期命中127.0.0.1:7101。這應該是WSGIServer,它如何以這種方式工作?

這裏是GEVENT代碼:

#!/usr/bin/python 
"""WSGI server example""" 
from gevent.wsgi import WSGIServer 

def app(env, start_response): 
    start_response('200 OK', [('Content-Type','text/html')]) 
    #return ["Hello World", StopIteration] # this is WSGI test, not working 
    return "Hello World" 
    # when set like this, frontend :80 still wont work (500 Internal error), 
    # but 127.0.0.1:7101 work like standard http 

if __name__ == '__main__': 
    WSGIServer(('', 7101), app).serve_forever() 

底線是,爲什麼只有在此設置GEVENT不會工作,都flup和uWSGI正在努力?官方示例here中沒有提到一些祕密設置。

回答

1

因爲gevent.wsgi.WSGIServer不是FCGI服務器,它只是HTTP服務器。您可以將您的請求從lighttpd代理爲gevent作爲http,或者使用wsgi。

+0

嗯,我需要fcgi進行負載平衡。我不明白,官方文檔和例子說,這是WSGI服務器看到這裏https://bitbucket.org/denis/gevent/src/tip/examples/wsgiserver.py#cl-4 – bradojevic 2012-08-05 23:43:34

+0

我認爲,這意味着,它是爲處理程序提供wsgi接口的服務器:environ,start_response等 – 2012-08-05 23:45:42

+0

如果您需要gevent和fcgi,則可以使用gent-loop中的uwsgi。 – 2012-08-05 23:51:38

0

U可以看到flup here指出來說話吧的FastCGI(不是HTTP),以及uWSGI here說 「生而只WSGI服務器」。 現在GEVENT說here「快速WSGI服務器基於libevent的-HTTP」,也搞糊塗了,但後來我嘗試gunicorn,而且鋼失敗。 後來我發現here 「Gunicorn '綠色獨角獸' 是一個Python WSGI HTTP服務器用於UNIX」。這意味着,GEVENT和gunicorn WSGI處理程序是HTTP請求不FastCGI的,但是,作爲費奧多爾Gogolev說,爲您處理他們WSGI服務器。

所以對於FlupuWSGIû配置的lighttpd(或任何其他網絡服務器)來使用的FastCGI模塊,但是對於gunicornGEVENT u使用代理模塊,併爲他們ü根本不必使用前端!如果沒有靜態的東西服務或其他原因你可以省略前端原因gunicorn狀態它警惕快速和穩定。