iT邦幫忙

2022 iThome 鐵人賽

DAY 15
0
Software Development

剛入職軟體工程師會需要知道的常見工具篇系列 第 15

[Day15] 簡單搞懂 Gunicorn & Uvicorn 名詞解釋

  • 分享至 

  • xImage
  •  

每次啟動python 框架的時候常常使用,卻不曉得到底是啥米?很常見卻常常忽略,來跟我一起補起來吧!

簡單來說,他的功能就是當Nginx(反向代理伺服器)收到請求後,會送給Web Server(Gunicorn , Uvicorn, etc),透過他再轉發給python 的某個框架(Django / Flask / FastAPI, etc) ,等python處理完,也是先回給web server 再回至nginx!

  • 好像大概知道他的角色了...但為什麼要多一層web server呢?

    • web server其實就是一層基於HTTP協議,用來溝通的!
  • 那難道Python 框架沒有這種功能嗎?

    • 是有的!但實務上自帶的web server較適合使用在測試環境!
  • 流程如下

nginx <==> web server(中繼站(Middleware)) <==> web application(ex. python(Django / Flask / FastAPI, etc))
  • Gunicorn (Django / Flask)
    • 支援WSGI(Web Server Gateway Interface)協議,規範HTTP Request 如何跟Application Server互動,同步接口,進來一個請求就返回一個回覆,無法支援長連接和WebSocket。支援WSGI協定的server就像是Gunicorn 和 uwsgi
gunicorn -w 1 -b 0.0.0.0:80 run:app

-w : worker 數量,建議一個Cpu 用2~4個workers
-b : host:port

  • Uvicorn (FastAPI)
    • 支援ASGI(Asynchronous Server Gateway Interface)協議,異步街口,能夠處理多種通用的協議類型,包括HTTP,HTTP2和WebSocket。
uvicorn main:app --host 0.0.0.0 --port 8080 --workers 4
  • main 就是指Python module "main",main.py 檔案,app是FastAPI的Application 就相當於from main import app
  • workers: Uvicorn worker process

鐵人賽要過半了,時間過得好快,其實參賽到現在主題有點飄忽不定,果然還是會被瀏覽人數影響,自認為GraphQL蠻不錯的,相關文件也少,但看得人好少呀...

參考資料

  1. What is the difference between Uvicorn and Gunicorn+Uvicorn?
  2. WSGI & ASGI
  3. 【Flask教學系列】Flask 為甚麼需要 WSGI 與 Nginx
  4. Server Workers - Gunicorn with Uvicorn
  5. 使用Gunicorn將API背景執行

上一篇
[Day14] 簡單搞懂Nginx Cache 設定
下一篇
[Day16] 簡單搞懂HTTP1.X / HTTP2 名詞解釋
系列文
剛入職軟體工程師會需要知道的常見工具篇30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0

異步街口 >>> 打錯字~~

我要留言

立即登入留言