有人能描述Gunicorn
如何将请求转发给Flask
internally
的过程吗?
如果有人解释了这个过程中的每一个步骤,从收到Gunicorn的请求到把它转发到烧瓶和相反的方式,那就太棒了。
请记住,在解释我是在这个地区的一只新蜜蜂。
发布于 2016-03-07 14:28:38
Gunicorn和Flask通过WSGI进行对话,它有两个方面:服务器端和应用程序端。
在应用程序(框架)方面,我们需要提供一个可调用的、最简单的示例:
def application(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/plain')])
return ['Hello World']
服务器将调用此应用程序,并提供环境信息和一个回调函数,用于指示响应的启动。当服务器获得响应时,它将返回给浏览器。
所以,对于火鸟和烧瓶来说:
from flask import Flask
app = Flask(__name__)
当您这样做时,您实际上已经得到了一个与WSGI兼容的应用程序,app
是一个可调用的:
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)
当您运行gunicorn app:app
时,您正在告诉gunicorn在哪里加载您的应用程序,source
当请求出现时,gunicorn会解析它,构造一个dict environ
,它被定义为here,包含REQUEST_METHOD
、QUERY_STRING
等信息,然后调用应用程序(一个烧瓶对象!)使用它:app(environ, start_repsonse)
source,start_repsonse
是Gunicorn中用于获取响应状态和头的回调,app
调用的返回值将作为响应体发送。
https://stackoverflow.com/questions/35845730
复制相似问题