關係圖
本篇的說明蠻複雜的,所以先給圖示,再依如下說明,相互對照。

Web 伺服器
首先要深刻的了解一件事,Django 不是 Web 伺服器,它只是一個框架(開發套件、函數庫)。當我們執行如下指令
python manage.py runserver 0.0.0.0:7000
這指令是在啟動 Django 內建名為 runserver 的 Web 伺服器。runserver 只適合於開發階段,並不適用於商業用途。
Web 伺服器負責網路連線、http 通訊等功能。目前常見的 Web 伺服器有 Nginx、Apache、Tomcat、gunicorn 、uvicorn、daphne、runserver。
uvicorn 支援 ASGI、WebSocket,需在 Django 3.0 以上執行,所以是首選。
Nginx 也是 Web 伺服器,地位等同 uvicorn。那麼還需要 Nginx 嗎? 因為 gunicorn、uvicorn 沒有靜態伺服器的功能,也沒有反向代理的功能,所以在 uvicorn 之前架設 Nginx 是絕對必要的。
WSGI 介面
WSGI 全名為 Web Server Gateway Interface (網頁伺服器閘道介面),它不是 Web 伺服器,而是 Web 應用程式與 Web 伺服器之間的標準介面。
WSGI 不支援 WebSocket
ASGI 介面
ASGI 全名為 Asynchronous Server Gateway Interface (非同步伺服器閘道介面),它是 WSGI 的進化版,加入更為強大的非同步功能。
ASGI 支援 WebSocket。
ASGI 支援的 Web Server
AGSI 支援的 Server 有如下幾種 :
Uvicon : 輕量、快速、適合開發。效能比 Daphe 高 2~5 倍,為目前的主流。
Daphe : [ˋdæfnɪ] 黛芬妮,Django 官方搭配用。
Hypercorn : 支援更多協定(HTTP/2, QUIC)
WebSocket
WebSocket 又是什麼? 簡單來說,如果想要跟伺服器建立雙向持久連線,獲得即時資訊,比如建立股票即時資訊、聊天室。它也是一種協定。
Java 世界
Java Servlet 如同 Django,Tomcat 如同 uvicorn。Tomcat 同樣需架設在 Nginx 之下。那麼 ASGI 的 WebSocket 在 Java 中是什麼呢? Java Servlet 包含了 WebSocket。
CPU 效能
請注意,uvicorn 為了非常步處理高併發連線,會非常消耗 CPU 的資源。
以 Intel 第 11 代 i7 (8核16緒) CPU 而言,在 Linux 下會佔用一緒約 75% 的資源。而在 Windows 下,會由原本的 5% 提升到14 %。
如果為了省電,還是建議使用 runserver。
開始新專案
使用如下指令建立專案
