Daphné est un serveur de protocole HTTP, HTTP2 et WebSocket pour ASGI et ASGI-HTTP, développé pour alimenter les canaux Django.
Il prend en charge la négociation automatique des protocoles ; il n'est pas nécessaire de préfixer l'URL pour déterminer les points de terminaison WebSocket par rapport aux points de terminaison HTTP.
Pointez simplement Daphné vers votre application ASGI et définissez éventuellement une adresse de liaison et un port (par défaut localhost, port 8000) :
daphné -b 0.0.0.0 -p 8001 django_project.asgi:application
Si vous avez l'intention d'exécuter Daphné derrière un serveur proxy, vous pouvez utiliser des sockets UNIX pour communiquer entre les deux :
daphné -u /tmp/daphne.sock django_project.asgi:application
Si Daphné est exécuté dans un gestionnaire de processus, vous souhaiterez peut-être qu'il se lie à un descripteur de fichier transmis par un processus parent. Pour y parvenir, vous pouvez utiliser l'indicateur --fd :
daphné --fd 5 django_project.asgi:application
Si vous souhaitez plus de contrôle sur les liaisons port/socket, vous pouvez recourir aux chaînes de description de point de terminaison de Twisted en utilisant l'indicateur --endpoint (-e), qui peut être utilisé plusieurs fois. Cette ligne démarrerait un serveur SSL sur le port 443, en supposant que key.pem et crt.pem existent dans le répertoire actuel (nécessite l'installation de pyopenssl) :
daphne -e ssl:443:privateKey=key.pem:certKey=crt.pem django_project.asgi:application
Les points de terminaison vous permettent même d'utiliser la syntaxe du point de terminaison txacme
pour obtenir des certificats automatiques de Let's Encrypt, sur lesquels vous pouvez en savoir plus sur http://txacme.readthedocs.io/en/stable/.
Pour voir toutes les options de ligne de commande disponibles, exécutez Daphne avec l'indicateur -h
.
Daphné prend en charge la terminaison native des connexions HTTP/2. Vous devrez cependant faire quelques choses pour que cela fonctionne. Tout d’abord, vous devez vous assurer d’installer les extras Twisted http2
et tls
:
pip install -U "Twisted[tls,http2]"
Ensuite, étant donné que tous les navigateurs actuels ne prennent en charge que HTTP/2 lors de l'utilisation de TLS, vous devrez démarrer Daphné avec TLS activé, ce qui peut être effectué à l'aide de la syntaxe de point de terminaison Twisted :
daphne -e ssl:443:privateKey=key.pem:certKey=crt.pem django_project.asgi:application
Vous pouvez également utiliser la syntaxe du point de terminaison txacme
ou tout autre élément permettant d'activer TLS sous le capot.
Vous devrez également être sur un système doté d'OpenSSL 1.0.2 ou supérieur ; si vous utilisez Ubuntu, cela signifie que vous avez besoin d'au moins Ubuntu 16.04.
Maintenant, lorsque vous démarrez Daphné, il devrait vous indiquer ceci dans le journal :
2017-03-18 19:14:02,741 INFO Démarrage du serveur sur ssl:port=8000:privateKey=privkey.pem:certKey=cert.pem, couche de canal django_project.asgi:channel_layer. 2017-03-18 19:14:02,742 INFO Prise en charge HTTP/2 activée
Ensuite, connectez-vous à un navigateur prenant en charge HTTP/2 et tout devrait fonctionner. Il est souvent difficile de dire que HTTP/2 fonctionne, car le journal que Daphné vous donne sera identique (c'est HTTP, après tout), et la plupart des navigateurs ne le rendent pas évident dans leurs fenêtres d'inspecteur de réseau. Il existe des extensions de navigateur qui vous permettront de savoir clairement si cela fonctionne ou non.
Daphné ne prend actuellement en charge que les requêtes « normales » sur HTTP/2 ; il n'y a pas encore de support pour les fonctionnalités étendues telles que Server Push. Cela permettra toutefois d’obtenir des connexions beaucoup plus rapides et de réduire les frais généraux.
Si vous disposez d'un proxy inverse devant votre site pour servir des fichiers statiques ou similaires, HTTP/2 ne fonctionnera que si ce proxy comprend et passe correctement la connexion.
Afin de définir le chemin racine de Daphné, qui est l'équivalent du paramètre WSGI SCRIPT_NAME
, vous disposez de deux options :
Daphne-Root-Path
, avec le chemin racine souhaité sous forme de valeur ASCII codée en URL. Cet en-tête ne sera pas transmis aux applications.--root-path
avec le chemin racine souhaité en tant que valeur ASCII codée en URL. L'en-tête est prioritaire si les deux sont définis. Comme pour SCRIPT_ALIAS
, la valeur doit commencer par une barre oblique, mais pas se terminer par une barre oblique ; Par exemple:
daphné --root-path=/forum django_project.asgi:application
Daphné nécessite Python 3.9 ou version ultérieure.
Veuillez vous référer aux principaux documents contribuant aux chaînes.
Pour exécuter des tests, assurez-vous d'avoir installé les tests
supplémentaires avec le package :
cd Daphné/ pip install -e '.[tests]' test py
Pour signaler des problèmes de sécurité, veuillez contacter [email protected]. Pour les signatures GPG et plus d'informations sur le processus de sécurité, voir https://docs.djangoproject.com/en/dev/internals/security/.
Pour signaler des bogues ou demander de nouvelles fonctionnalités, veuillez ouvrir un nouveau problème GitHub.
Ce référentiel fait partie du projet Channels. Pour l'équipe de berger et d'entretien, veuillez consulter le fichier Lisez-moi des chaînes principales.