Daphne ist ein HTTP-, HTTP2- und WebSocket-Protokollserver für ASGI und ASGI-HTTP, der für die Stromversorgung von Django-Kanälen entwickelt wurde.
Es unterstützt die automatische Aushandlung von Protokollen; Es ist kein URL-Präfix erforderlich, um WebSocket-Endpunkte von HTTP-Endpunkten zu unterscheiden.
Verweisen Sie Daphne einfach auf Ihre ASGI-Anwendung und legen Sie optional eine Bindungsadresse und einen Port fest (standardmäßig localhost, Port 8000):
daphne -b 0.0.0.0 -p 8001 django_project.asgi:application
Wenn Sie Daphne hinter einem Proxyserver ausführen möchten, können Sie UNIX-Sockets verwenden, um zwischen den beiden zu kommunizieren:
daphne -u /tmp/daphne.sock django_project.asgi:application
Wenn Daphne in einem Prozessmanager ausgeführt wird, möchten Sie möglicherweise, dass es an einen Dateideskriptor gebunden wird, der von einem übergeordneten Prozess weitergegeben wird. Um dies zu erreichen, können Sie das Flag --fd verwenden:
daphne --fd 5 django_project.asgi:application
Wenn Sie mehr Kontrolle über die Port-/Socket-Bindungen wünschen, können Sie auf die Endpunktbeschreibungszeichenfolgen von Twisted zurückgreifen, indem Sie das Flag --endpoint (-e) verwenden, das mehrfach verwendet werden kann. Diese Zeile würde einen SSL-Server auf Port 443 starten, vorausgesetzt, dass key.pem und crt.pem im aktuellen Verzeichnis vorhanden sind (erfordert die Installation von pyopenssl):
daphne -e ssl:443:privateKey=key.pem:certKey=crt.pem django_project.asgi:application
Mit Endpunkten können Sie sogar die txacme
Endpunktsyntax verwenden, um automatische Zertifikate von Let's Encrypt zu erhalten. Weitere Informationen hierzu finden Sie unter http://txacme.readthedocs.io/en/stable/.
Um alle verfügbaren Befehlszeilenoptionen anzuzeigen, führen Sie daphne mit der Flagge -h
aus.
Daphne unterstützt das native Beenden von HTTP/2-Verbindungen. Sie müssen jedoch ein paar Dinge tun, damit es funktioniert. Zuerst müssen Sie sicherstellen, dass Sie die Twisted http2
und tls
Extras installieren:
pip install -U „Twisted[tls,http2]“
Da alle aktuellen Browser bei Verwendung von TLS nur HTTP/2 unterstützen, müssen Sie Daphne als Nächstes mit aktiviertem TLS starten. Dies kann mithilfe der Twisted-Endpunkt-Syntax erfolgen:
daphne -e ssl:443:privateKey=key.pem:certKey=crt.pem django_project.asgi:application
Alternativ können Sie die txacme
Endpunktsyntax oder alles andere verwenden, das TLS unter der Haube ermöglicht.
Sie müssen sich außerdem auf einem System befinden, das über OpenSSL 1.0.2 oder höher verfügt; Wenn Sie Ubuntu verwenden, bedeutet dies, dass Sie mindestens Ubuntu 16.04 benötigen.
Wenn Sie Daphne nun starten, sollte im Protokoll Folgendes angezeigt werden:
2017-03-18 19:14:02,741 INFO Startserver bei ssl:port=8000:privateKey=privkey.pem:certKey=cert.pem, Kanalschicht django_project.asgi:channel_layer. 18.03.2017 19:14:02.742 INFO HTTP/2-Unterstützung aktiviert
Stellen Sie dann eine Verbindung mit einem Browser her, der HTTP/2 unterstützt, und alles sollte funktionieren. Es ist oft schwer zu sagen, dass HTTP/2 funktioniert, da das Protokoll, das Daphne Ihnen gibt, identisch ist (es ist schließlich HTTP) und die meisten Browser es in ihren Netzwerk-Inspektorfenstern nicht offensichtlich machen. Es gibt Browsererweiterungen, die Ihnen deutlich zeigen, ob es funktioniert oder nicht.
Daphne unterstützt derzeit nur „normale“ Anfragen über HTTP/2; Es gibt noch keine Unterstützung für erweiterte Funktionen wie Server Push. Dies führt jedoch zu wesentlich schnelleren Verbindungen und geringeren Gemeinkosten.
Wenn Sie einen Reverse-Proxy vor Ihrer Site haben, um statische Dateien oder ähnliches bereitzustellen, funktioniert HTTP/2 nur, wenn dieser Proxy die Verbindung richtig versteht und weiterleitet.
Um den Root-Pfad für Daphne festzulegen, der der WSGI-Einstellung SCRIPT_NAME
entspricht, haben Sie zwei Möglichkeiten:
Daphne-Root-Path
mit dem gewünschten Root-Pfad als URL-codierten ASCII-Wert. Dieser Header wird nicht an Anwendungen weitergegeben.--root-path
mit dem gewünschten Root-Pfad als URL-codierten ASCII-Wert fest. Der Header hat Vorrang, wenn beide gesetzt sind. Wie bei SCRIPT_ALIAS
sollte der Wert mit einem Schrägstrich beginnen, aber nicht mit einem enden; Zum Beispiel:
daphne --root-path=/forum django_project.asgi:application
Daphne erfordert Python 3.9 oder höher.
Bitte beachten Sie die Beitragsdokumente der Hauptkanäle.
Um Tests auszuführen, stellen Sie sicher, dass Sie die tests
zusätzlich mit dem Paket installiert haben:
cd daphne/ pip install -e '.[tests]' pytest
Um Sicherheitsprobleme zu melden, wenden Sie sich bitte an [email protected]. GPG-Signaturen und weitere Informationen zum Sicherheitsprozess finden Sie unter https://docs.djangoproject.com/en/dev/internals/security/.
Um Fehler zu melden oder neue Funktionen anzufordern, öffnen Sie bitte ein neues GitHub-Problem.
Dieses Repository ist Teil des Channels-Projekts. Informationen zum Hirten- und Wartungsteam finden Sie in der Readme-Datei zu den Hauptkanälen.