2016-03-07 17 views
5

Bất cứ ai có thể mô tả quy trình cách Gunicorn chuyển tiếp yêu cầu đến Flaskinternally?Yêu cầu chuyển tiếp của Gunicorn tới bình

Sẽ rất tuyệt nếu ai đó giải thích từng bước liên quan đến quá trình nhận yêu cầu của Gunicorn để chuyển tiếp nó tới Flask và ngược lại.

Hãy ghi nhớ trong khi giải thích rằng tôi là một người mới trong lĩnh vực này.

Trả lời

9

Cuộc đàm thoại Gunicorn và Flask qua WSGI, có hai mặt: phía máy chủ và phía ứng dụng.

về việc áp dụng (framework) bên, chúng ta cần phải cung cấp một callable, ví dụ đơn giản:

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

máy chủ sẽ gọi ứng dụng này và cung cấp thông tin môi trường và một hàm callback mà được sử dụng để chỉ bắt đầu của một phản ứng. khi máy chủ nhận được phản hồi, nó sẽ trả về trình duyệt.

như vậy, cho gunicorn và bình:

from flask import Flask 
app = Flask(__name__) 

khi bạn làm điều này, bạn đã thực sự có một ứng dụng tương thích WSGI, app là một callable:

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) 

và khi bạn chạy gunicorn app:app , bạn đang nói với gunicorn nơi tải ứng dụng của bạn, source

khi có yêu cầu, gunicorn phân tích cú pháp, xây dựng một dict environ, được định nghĩa here, chứa thông tin như REQUEST_METHOD, QUERY_STRING v.v., sau đó gọi ứng dụng (đối tượng Flask!) Với nó: app(environ, start_repsonse)source, start_repsonse là một cuộc gọi lại trong Gunicorn để nhận trạng thái phản hồi và tiêu đề và giá trị trả lại của cuộc gọi app sẽ được gửi dưới dạng nội dung phản hồi.

+0

Sự khác nhau giữa việc gọi app.run() và gọi ứng dụng bình bằng Gunicorn là gì? – neel

+0

'app.run()' sẽ chạy ứng dụng với máy chủ wsgi được xây dựng trong bình, dành cho mục đích phát triển và hoạt động kém dưới tải trọng cao. trong khi gunicorn được tối ưu hóa cao cho hiệu suất – wong2

+0

gunicorn python_file: ứng dụng sẽ cho gunicorn biết nơi tải ứng dụng của bạn. Nó có nghĩa là gì? Bạn có thể giải thích thêm một chút không? – neel

Các vấn đề liên quan