Daphne 是一個用於 ASGI 和 ASGI-HTTP 的 HTTP、HTTP2 和 WebSocket 協定伺服器,旨在為 Django Channels 提供支援。
支援協議自動協商;不需要 URL 前綴來確定 WebSocket 端點與 HTTP 端點。
只需將 Daphne 指向您的 ASGI 應用程序,並選擇設定綁定位址和連接埠(預設為 localhost,連接埠 8000):
達芙妮-b 0.0.0.0 -p 8001 django_project.asgi:應用程式
如果您打算在代理伺服器後面執行 daphne,您可以使用 UNIX 套接字在兩者之間進行通訊:
daphne -u /tmp/daphne.sock django_project.asgi:application
如果 daphne 正在進程管理器內執行,您可能會想要它綁定到從父進程傳遞下來的檔案描述符。要實現此目的,您可以使用 --fd 標誌:
達芙妮 --fd 5 django_project.asgi:application
如果您想要對連接埠/套接字綁定進行更多控制,您可以透過使用 --endpoint (-e) 標誌來回退到使用twisted 的端點描述字串,該標誌可以多次使用。此行將在連接埠 443 上啟動 SSL 伺服器,假設 key.pem 和 crt.pem 存在於目前目錄中(需要安裝 pyopenssl):
daphne -e ssl:443:privateKey=key.pem:certKey=crt.pem django_project.asgi:application
端點甚至允許您使用txacme
端點語法從 Let's Encrypt 獲取自動證書,您可以在 http://txacme.readthedocs.io/en/stable/ 閱讀更多資訊。
若要查看所有可用的命令列選項,請使用-h
標誌執行 daphne。
Daphne 支援本機終止 HTTP/2 連線。不過,您需要做一些事情才能使其正常工作。首先,您需要確保安裝了 Twisted http2
和tls
extras:
pip install -U "Twisted[tls,http2]"
接下來,由於目前所有瀏覽器在使用 TLS 時僅支援 HTTP/2,因此您需要在啟用 TLS 的情況下啟動 Daphne,這可以使用 Twisted 端點語法來完成:
daphne -e ssl:443:privateKey=key.pem:certKey=crt.pem django_project.asgi:application
或者,您可以使用txacme
端點語法或任何其他在幕後啟用 TLS 的語法。
您還需要使用具有OpenSSL 1.0.2 或更高版本的系統;如果您使用 Ubuntu,這意味著您至少需要 Ubuntu 16.04。
現在,當您啟動 Daphne 時,它應該在日誌中告訴您:
2017-03-18 19:14:02,741 資訊在 ssl:port=8000:privateKey=privkey.pem:certKey=cert.pem、通道層 django_project.asgi:channel_layer 啟動伺服器。 2017-03-18 19:14:02,742 INFO HTTP/2 支援已啟用
然後,連接支援 HTTP/2 的瀏覽器,一切都應該正常。通常很難判斷 HTTP/2 是否正常運作,因為 Daphne 為您提供的日誌將是相同的(畢竟它是 HTTP),而且大多數瀏覽器不會在其網頁檢查器視窗中顯示這一點。有些瀏覽器擴充功能可以讓您清楚知道它是否正常運作。
Daphne 目前僅支援透過 HTTP/2 的「正常」請求;尚不支援伺服器推送等擴充功能。然而,它將帶來更快的連接和更低的開銷。
如果您的網站前面有一個反向代理來提供靜態文件或類似文件,則僅當該代理程式瞭解並正確透過連線時,HTTP/2 才會運作。
為了設定 Daphne 的根路徑(相當於 WSGI SCRIPT_NAME
設定),您有兩個選項:
Daphne-Root-Path
,並將所需的根路徑作為 URL 編碼的 ASCII 值。該標頭不會傳遞給應用程式。--root-path
命令列選項設定為 URL 編碼的 ASCII 值,並使用所需的根路徑。如果兩者都設定了,則標頭優先。與SCRIPT_ALIAS
一樣,該值應以斜線開頭,但不能以 1 結尾;例如:
daphne --root-path=/forum django_project.asgi:application
Daphne 需要 Python 3.9 或更高版本。
請參閱主要管道貢獻文件。
若要執行測試,請確保您已隨軟體包額外安裝了tests
:
CD達芙妮/ pip install -e '.[測試]' Python測試
若要回報安全問題,請聯絡 [email protected]。有關 GPG 簽章和更多安全流程信息,請參閱 https://docs.djangoproject.com/en/dev/internals/security/。
若要回報錯誤或請求新功能,請開啟新的 GitHub 問題。
此儲存庫是 Channels 專案的一部分。對於牧羊人和維護團隊,請參閱主要頻道自述文件。