什麼是 WSGI & ASGI ? (Python)
News from: Hs
使用過 Python 相關後端框架開發過的人,一定會常常看到 WSGI 這個詞。我自己在學習 Django 後端框架進行開發的階段,最後要將 web application 部署到雲端或是任何的主機的時候,會看到眾多教學說要使用 gunicorn 或是 uwsgi 的工具去部署。這些是什麼? 為什麼要透過這些東西去部署? 不能直接跑 python manage.py runserver 呢? 本篇目的就是來探討何謂 WSGI ,以及為什麼要用它!
什麼是 WSGI?
WSGI 是 Web Server Gateway Interface 的縮寫,是一種協議,或是叫做規範。WSGI 定義了 web server 跟 python web application 之間溝通的規範。這樣的規範提供開發者很大的彈性,可以自由選擇不同的 web server 跟 python web application 去做搭配使用,只要是兩者都有符合 WSGI 就可以了哦!
WSGI 跟 WSGI server 這兩個名詞常常會搞混,誤以為 WSGI 就是一種伺服器的名稱,其實 WSGI server 意思指的是遵照 WSGI 規範的 server 哦!像是 gunicorn, uwsgi 都是屬於 WSGI server 哦。
有關更詳細的 WSGI 規範內容與說明,可以參見 wsgi.org 。
為什麼要用 WSGI?
在傳統的 web server 中,像是 NGINX, APACHE 是無法去執行 Python web applicatION 的。因此需要一個『能夠執行』的 web server 來達到這個目的,而這種 web server 也叫做 WSGI server。
從下圖中,我們以 Django 搭配 gunicorn 為例,在 Django 中的 wsgi.py 檔案裡有定義了一個 application 的變數,提供 gunicorn 去呼叫 Django 的程式哦!
從下圖中,我們以 Django 搭配 gunicorn 為例,在 Django 中的 wsgi.py 檔案裡有定義了一個 application 的變數,提供 gunicorn 去呼叫 Django 的程式哦!
WSGI 提供的是一套規範,提供 web server 與 python web application 之間的一個接口,只要符合這項規範的任何一個 web server,都能與符合規範的 application 進行串接。提供開發人員非常大的彈性,不用因為 web server 跟 web application 之間不相容,而要重新開發,或是整套換掉。只要選用都符合 WSGI 規範的框架,就能自由選用要哪種組合。
至於為什麼需要 web server 呢? 這邊長話短說。web server 諸如 NGINX 、APACHE,可以提供附載平衡(load balance)、反向代理(reverse proxy)以及更快速的提供靜態檔案等等的功能,這些功能對於實際部署到主機上非常重要。
另一方面也能將 web server 與 web application 在開發上切割開來。因為開發 web server 的人需要去處理多個請求進到 server 狀況,但是 web application(framework) 的開發者,就不需要處理這種事情,可以更專注在 framework 的開發。
留言
張貼留言