WSGI
wiki 上的解釋
- Web Server Gateway Interface
- Web 服務器網關接口
- 是為 Python 定義的 Web 服務器和 Web 應用程序或框架之間的一種簡單而通用的接口
WSGI 的問題
- 隨着移動網絡的發展,Web 技術也在升級,比如 WebSocket、HTTP/2,HTTP/3
- WSGI 應用是一個單調用、同步接口,即輸入一個請求,返回一個響應;這個模式無法支持長連接或者 WebSocket 這樣的連接
- 即使想辦法將 WSGI 應用改成異步,還有另一個限制:一個 URL 對應一個請求,而 HTTP/2、Websocket 等在一個 URL 里會出現多個請求
ASGI 的背景
- 在 Python 3.5+ 增加 async/await 特性之后,異步編程變得異常火爆
- 但 Python 仍缺乏用於 asyncio 框架最低限度的低級服務器/應用程序接口
- 而 ASGI 協議規范的出現填補了這一空白,這意味着現在能夠開始構建可在所有異步框架中使用的通用工具集
ASGI
- Asynchronous Server Gateway Interface
- 異步服務器網關接口
- ASGI 是 WSGI 的繼承者,旨在提供支持異步的 Python web 服務器、框架和應用程序之間的標准接口
- ASGI 為異步和同步應用程序提供了一個標准,繼續成為 web 服務器、框架和應用程序(如異步 python 中的 WSGI)之間的標准兼容性
簡單總結
- WSGI 是為同步應用程序提供標准,不支持 WebSocket
- ASGI 是為異步、同步應用程序提供標准,支持 WSGI 不支持當前 web 開發中的一些新的協議標准
- ASGI 是對 WSGI 的擴展