1

私は奇妙な問題を抱えています。/test を fastcgi バックエンドに渡すように Lighttpd を構成しました。これを構成に追加しただけです

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をテストしましたが、それでも問題ありません。

フラップの例:

#!/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 .

4

2 に答える 2

1

gevent.wsgi.WSGIServer は fcgi サーバーではないため、http サーバーのみです。lighttpd から gevent へのリクエストを http としてプロキシするか、wsgi を使用できます。

于 2012-08-05T16:51:34.417 に答える
0

ここで flup がSPEAK FastCGI ( HTTP ではありません) と述べていることがわかります。また、ここの uWSGIは「WSGI 専用サーバーとして誕生しました」と述べています。今、Gevent はここで「libevent-http に基づく高速 WSGI サーバー」と言っています。次に、ここで「Gunicorn 'Green Unicorn' is a Python WSGI HTTP Server for UNIX」を見つけました。つまり、 gevent および gunicorn WSGI ハンドラはFastCGIではなく HTTP リクエストですが、Fedor Gogolev が言ったように、ハンドラの場合、それらは WSGI サーバーです。

したがって、FlupuWSGIでは、 lighttpd (またはその他の Web サーバー) を構成してfastcgiモジュールを使用しますが、gunicorngeventではプロキシモジュールを使用し、それらの場合はフロントエンドを使用する必要はまったくありません!静的がない場合提供するもの、またはフロントエンドを省略できるその他の理由により、gunicorn状態が発生し、高速で安定しています。

于 2012-08-06T12:38:43.113 に答える