入門理解WSGI

2018/03/18 posted in  python comments

WSGI全名是"Web Server Gateway Interface",就是一個規範python server的interface。

傳統Web server如Apache+php會直接在runtime處理請求並return response,但python server通常只能長run一個python process,這樣會造成server脆弱,容易crash等等壞處。

但要配上Apache/nginx這些server,它們不會知道你的application怎樣運作,必須有個統一規範:WSGI。

簡單來說在WSGI架構底下,你的python server(WSGI Application)不會直接接收requests,而是會有多一層server(WSGI server)。

例子

假設你的server由以下部分組成:

  1. Web proxy (nginx/apache...)
  2. WSGI server (gunicorn/uWSGI...)
  3. Python server (django/flask...)

WSGI有兩部分協議:

  1. For WSGI server: 當你處理任何incoming requests,你可以call這些function。
  2. For python server: 你需要提供這些function給WSGI server。

最基本的WSGI Application:

# wsgi.py
def application(env, start_response):
    start_response('200 OK', [('Content-Type', 'text/html')])
    return ["Hello!"]

然後WSGI server就可以call application(environ, start_response)去處理requests。

當然你的python server不會這麼簡單,所以django等frameworks會幫你自動處理好成為一個WSGI application。

補充連結