2016-03-07 30 views
5

Czy każdy może opisać, w jaki sposób Gunicorn przesyła żądanie do Flaskinternally?W jaki sposób Gunicorn przekazuje zapytanie do kolby?

Byłoby wspaniale, gdyby ktoś wyjaśnił każdy krok zaangażowany w proces od otrzymania żądania od Gunicorn do przekazania go do Flask i odwrotnej drogi.

Należy pamiętać, wyjaśniając, że jestem nowicjuszem w tej dziedzinie.

Odpowiedz

9

Gunicorn i Flask rozmawiają przez WSGI, która ma dwie strony: stronę serwera i stronę aplikacji.

na aplikacji (framework) strony, musimy zapewnić wywoływalnym, najprostszy przykład:

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

serwer będzie zadzwonić do tej aplikacji i dostarczanie informacji środowiskowej i funkcji zwrotnej, która jest wykorzystywana do wskazania początek odpowiedzi. kiedy serwer otrzyma odpowiedź, zwróci ją do przeglądarki.

tak, dla gunicorn i kolby:

from flask import Flask 
app = Flask(__name__) 

kiedy to zrobić, rzeczywiście masz aplikację kompatybilną WSGI, app jest wymagalne:

class Flask(object): 
    ... 

    def __call__(self, environ, start_response): 
     """Shortcut for :attr:`wsgi_app`.""" 
     return self.wsgi_app(environ, start_response) 

[source](https://github.com/mitsuhiko/flask/blob/master/flask/app.py#L1976) 

i po uruchomieniu gunicorn app:app , mówisz gunicornowi, gdzie załadować twoją aplikację, source

kiedy przychodzi żądanie, gunicorn je analizuje, konstruuje dyktando environ, który jest zdefiniowany here, zawiera informacje jak REQUEST_METHOD, QUERY_STRING etc, a następnie wywołać aplikację (obiekt Kolba!) Z nim: app(environ, start_repsonse)source, start_repsonse jest zwrotna w Gunicorn aby uzyskać jego status réponse i nagłówków, a wartość zwracaną wywołanie app zostanie wysłane jako treść odpowiedzi.

+0

Jaka jest różnica między wywołaniem aplikacji app.run() a wywoływaniem kolby za pomocą Gunicorn? – neel

+0

'app.run()' uruchomi aplikację z wbudowanym serwerem wsgi z kolbą, który służy do celów programistycznych i słabo działa przy dużym obciążeniu. podczas gdy gunicorn jest wysoce zoptymalizowany pod kątem wydajności – wong2

+0

gunicorn python_file: aplikacja powie gunicorn dokąd załadować twoją aplikację. Co to znaczy? Czy możesz wyjaśnić to nieco dalej? – neel