iT邦幫忙

2024 iThome 鐵人賽

DAY 8
1
自我挑戰組

學習網頁開發系列 第 8

WSGI 和 ASGI

  • 分享至 

  • xImage
  •  

什麼是 WSGI 和 ASGI

WSGI 和 ASGI 都是 Python 網頁開發的常見名詞, WSGI 為 Web Server Gateway Interface,ASGI 為 Asynchronous Server Gateway Interface。兩者主要功能一致,都是網路伺服器(如 Apache、Nginx等)和後端應用程式間通訊的接口標準,而基於 WSGI 或 ASGI 運行的伺服器才真正是兩者溝通的橋樑。需要橋樑存在的理由很簡單,因為網頁伺服器看不懂 Python,需要一定的翻譯才能運行順暢。同時,這樣可以將應用邏輯端和網路流量端拆分開來,各自只需關注自己的業務與強項,不必分心他物。假使有需要的話,也可以很輕易地更換相應的配套,適應業務場景,不必拘泥於綁定的系統。

兩者的差別

它們的主要區別在於處理請求的方式和應用場景。就字面上來說,WSGI 和 ASGI 最大的差別在於,WSGI 是 Synchronous (同步的),而 ASGI 是 Asynchronous (非同步的)。

  1. WSGI
    全稱: Web Server Gateway Interface
    同步處理: WSGI 是為同步 Web 應用程式設計的。每個請求在一個執行緒(Thread)或進程(Process)中處理,直到完成回應。適用於大多數傳統的 Web 應用,比如基於 Django 和 Flask 的應用。
    性能限制: 由於 WSGI 的同步性,在處理 I/O 密集型任務(如資料庫查詢或與外部 API 的通信)時,可能會導致性能瓶頸(throttle),因為每個請求必須等待其他請求完成。

  2. ASGI
    全稱: Asynchronous Server Gateway Interface
    非同步處理: ASGI 是為非同步 Web 應用程式設計的。它支援異步處理,允許在單個執行緒中處理多個請求。適合處理 WebSocket、Long Polling 等實時通訊需求,或者需要高併發的應用。
    擴展性: ASGI 可以處理多種協議(HTTP、WebSocket 等),適合現代 Web 應用,特別是需要非同步處理的應用,比如基於 FastAPI 或 Django Channels 的應用。

適用場景:
WSGI 適用於傳統的 Web 應用程式和不需要異步處理的場景。
ASGI 適用於現代 Web 應用程式,特別是需要處理高併發或實時通訊的場景。


上一篇
Django Model SoftDelete
下一篇
Django 分頁
系列文
學習網頁開發13
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言