Daphne é um servidor de protocolo HTTP, HTTP2 e WebSocket para ASGI e ASGI-HTTP, desenvolvido para potencializar canais Django.
Suporta negociação automática de protocolos; não há necessidade de prefixo de URL para determinar endpoints WebSocket versus endpoints HTTP.
Basta apontar o Daphne para seu aplicativo ASGI e, opcionalmente, definir um endereço de ligação e uma porta (o padrão é localhost, porta 8000):
daphne -b 0.0.0.0 -p 8001 django_project.asgi:aplicativo
Se você pretende executar o daphne atrás de um servidor proxy, você pode usar soquetes UNIX para se comunicar entre os dois:
daphne -u /tmp/daphne.sock django_project.asgi:aplicativo
Se o daphne estiver sendo executado dentro de um gerenciador de processos, você pode querer que ele seja vinculado a um descritor de arquivo transmitido de um processo pai. Para conseguir isso, você pode usar o sinalizador --fd:
daphne --fd 5 django_project.asgi:aplicativo
Se você quiser mais controle sobre as ligações de porta/soquete, você pode voltar a usar strings de descrição de endpoint do twisted usando o sinalizador --endpoint (-e), que pode ser usado várias vezes. Esta linha iniciaria um servidor SSL na porta 443, assumindo que key.pem e crt.pem existam no diretório atual (requer a instalação do pyopenssl):
daphne -e ssl:443:privateKey=key.pem:certKey=crt.pem django_project.asgi:application
Os endpoints ainda permitem que você use a sintaxe do endpoint txacme
para obter certificados automáticos do Let's Encrypt, sobre os quais você pode ler mais em http://txacme.readthedocs.io/en/stable/.
Para ver todas as opções de linha de comando disponíveis, execute daphne com o sinalizador -h
.
Daphne oferece suporte nativo ao encerramento de conexões HTTP/2. No entanto, você precisará fazer algumas coisas para fazê-lo funcionar. Primeiro, você precisa instalar os extras Twisted http2
e tls
:
pip install -U "Torcido[tls,http2]"
Em seguida, como todos os navegadores atuais suportam apenas HTTP/2 ao usar TLS, você precisará iniciar o Daphne com o TLS ativado, o que pode ser feito usando a sintaxe do endpoint Twisted:
daphne -e ssl:443:privateKey=key.pem:certKey=crt.pem django_project.asgi:application
Alternativamente, você pode usar a sintaxe do endpoint txacme
ou qualquer outra coisa que habilite o TLS nos bastidores.
Você também precisará estar em um sistema que possua OpenSSL 1.0.2 ou superior ; se você estiver usando o Ubuntu, isso significa que você precisa de pelo menos o Ubuntu 16.04.
Agora, quando você iniciar o Daphne, ele deverá informar isso no log:
18/03/2017 19:14:02,741 INFO Iniciando servidor em ssl:port=8000:privateKey=privkey.pem:certKey=cert.pem, camada de canal django_project.asgi:channel_layer. 18/03/2017 19:14:02.742 INFO Suporte HTTP/2 ativado
Em seguida, conecte-se a um navegador que suporte HTTP/2 e tudo deverá estar funcionando. Muitas vezes é difícil dizer se o HTTP/2 está funcionando, pois o log que Daphne fornece será idêntico (afinal, é HTTP), e a maioria dos navegadores não deixa isso óbvio nas janelas do inspetor de rede. Existem extensões de navegador que permitem saber claramente se está funcionando ou não.
Daphne suporta apenas solicitações "normais" via HTTP/2 no momento; ainda não há suporte para recursos estendidos como Server Push. No entanto, resultará em conexões muito mais rápidas e menores despesas gerais.
Se você tiver um proxy reverso na frente do seu site para servir arquivos estáticos ou similares, o HTTP/2 só funcionará se esse proxy entender e passar pela conexão corretamente.
Para definir o caminho raiz para Daphne, que é equivalente à configuração WSGI SCRIPT_NAME
, você tem duas opções:
Daphne-Root-Path
, com o caminho raiz desejado como um valor ASCII codificado em URL. Este cabeçalho não será transmitido aos aplicativos.--root-path
com o caminho raiz desejado como um valor ASCII codificado em URL. O cabeçalho tem precedência se ambos estiverem definidos. Tal como acontece com SCRIPT_ALIAS
, o valor deve começar com uma barra, mas não terminar com uma; por exemplo:
daphne --root-path=/forum django_project.asgi:aplicativo
Daphne requer Python 3.9 ou posterior.
Consulte os principais documentos de contribuição dos canais.
Para executar testes, certifique-se de ter instalado os tests
extras com o pacote:
cd dafne/ pip install -e '.[testes]' pytest
Para relatar problemas de segurança, entre em contato com [email protected]. Para assinaturas GPG e mais informações sobre processos de segurança, consulte https://docs.djangoproject.com/en/dev/internals/security/.
Para relatar bugs ou solicitar novos recursos, abra um novo problema no GitHub.
Este repositório faz parte do projeto Canais. Para a equipe de pastor e manutenção, consulte o leia-me principal dos Canais.