A web site using Flask Framework
- Flask for service logic
- Gunicorn hosts the flask app
- Finally nginx esponsible for:
- buffer slow clients on the Internet
- load balance for many gunicorn processes
- WAF and so on
How it works
- pep333
pep333
The WSGI interface has two sides: the “server” or “gateway” side, and the “application” or “framework” side. The server side invokes a callable object that is provided by the application side.
pep333 定义了python web框架和web server之间的接口,只要框架实现了wsgi 接口,就可以被支持wsgi接口的web server调用。在这里,web server接收到请求,调用框架,获取输出。
如下是一个简单的满足wsgi 接口的python web应用:
def simple_app(environ, start_response):
"""Simplest possible application object"""
status = '200 OK'
response_headers = [('Content-type', 'text/plain')]
start_response(status, response_headers)
return ['Hello world!\n']
web server预先定义start_response 方法供web 应用调用来收集输出,web server在调用web 应用时,同时传入environ变量来代表os当前的环境,server环境和web request。
具体在当前的gunicorn、flask环境下。
flask 在Flask对象里,通过__call__方法满足了wsgi的接口要求。
def __call__(self, environ, start_response):
"""The WSGI server calls the Flask application object as the
WSGI application. This calls :meth:`wsgi_app` which can be
wrapped to applying middleware."""
return self.wsgi_app(environ, start_response)
<