WSGI & ASGI

Table of Contents

<span class="ez-toc-title-toggle"><a href="#" class="ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle" aria-label="顯示/隱藏內容目錄"><span class="ez-toc-js-icon-con"><span class=""><span class="eztoc-hide" style="display:none;">Toggle</span><span class="ez-toc-icon-toggle-span"><svg style="fill: #999;color:#999" xmlns="http://www.w3.org/2000/svg" class="list-377408" width="20px" height="20px" viewBox="0 0 24 24" fill="none"><path d="M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z" fill="currentColor"></path></svg><svg style="fill: #999;color:#999" class="arrow-unsorted-368013" xmlns="http://www.w3.org/2000/svg" width="10px" height="10px" viewBox="0 0 24 24" version="1.2" baseProfile="tiny"><path d="M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z"/></svg></span></span></span></a></span>

什麼是 WSGI?

Web Server Gateway Interface,的縮寫(Web伺服器閘道器介面),是一種協議,這個協議制定了一套規則,規定HTTP Request要如何與Application Server溝通。

  • WSGI應用是一個單調用、同步接口,即輸入一個請求,返回一個響應,無法支持長連接或者WebSocket

WSGI 與 WSGI Server

可以將WSGI Server理解成處理 HTTP Request 與 Python 可理解的 Input/Output 的中繼站(Middleware)

所有支援 WSGI 協定的 Server 都可稱為 WSGI Server,現在比較常見的WSGI Server是gunicorn及 uwsgi。

什麼是 ASGI?

  • Asynchronous Server Gateway Interface(異步服務器網關接口)
  • ASGI 是 WSGI 的繼承者,已經存在的WSGI應用可以直接在ASGI服務器中運行
  • ASGI 代表異步服務器網關接口,是爲異步、同步應用程序提供標準,支持 WSGI 不支持當前 web 開發中的一些新的協議標準
  • 介於網絡協議服務和Python應用之間的標準接口,能夠處理多種通用的協議類型,包括HTTP,HTTP2和WebSocket。

總結: WSGI 與 ASGI

  • 相同之處:
    • WSGI 與 ASGI都指定接口並位於 Web 服務器和 Python Web 應用程序或框架之間。
  • 兩者的區別:
    • WSGI是基於HTTP協議模式的,不支持WebSocket
    • ASGI的誕生則是為了解決Python常用的WSGI不支持當前Web開發中的一些新的協議標準。
    • ASGI對於WSGI原有的模式的支持和WebSocket的擴展,即ASGI是WSGI的擴展。