Daphne — это сервер протоколов HTTP, HTTP2 и WebSocket для ASGI и ASGI-HTTP, разработанный для поддержки каналов Django.
Он поддерживает автоматическое согласование протоколов; нет необходимости в префиксе URL-адреса для определения конечных точек WebSocket и конечных точек HTTP.
Просто укажите Дафне ваше приложение ASGI и при необходимости установите адрес привязки и порт (по умолчанию localhost, порт 8000):
дафна -b 0.0.0.0 -p 8001 django_project.asgi:приложение
Если вы собираетесь запустить daphne за прокси-сервером, вы можете использовать сокеты UNIX для связи между ними:
дафна -u /tmp/daphne.sock django_project.asgi:приложение
Если daphne запускается внутри диспетчера процессов, вы можете захотеть привязать его к файловому дескриптору, переданному из родительского процесса. Для этого вы можете использовать флаг --fd:
дафна --fd 5 django_project.asgi:приложение
Если вам нужен больший контроль над привязками портов/сокетов, вы можете вернуться к использованию строк описания конечной точки Twisted, используя флаг --endpoint (-e), который можно использовать несколько раз. Эта строка запустит SSL-сервер на порту 443, предполагая, что 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/.
Чтобы просмотреть все доступные параметры командной строки, запустите daphne с флагом -h
.
Daphne изначально поддерживает завершение соединений HTTP/2. Однако вам нужно будет сделать пару вещей, чтобы все заработало. Во-первых, вам необходимо убедиться, что вы установили дополнительные компоненты Twisted http2
и tls
:
pip install -U "Twisted[tls,http2]"
Далее, поскольку все современные браузеры поддерживают только HTTP/2 при использовании TLS, вам нужно будет запустить Daphne с включенным TLS, что можно сделать с помощью синтаксиса Twisted endpoint:
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 работает, поскольку журнал, который дает вам Дафна, будет идентичен (в конце концов, это HTTP), и большинство браузеров не делают это очевидным в своих окнах сетевого инспектора. Существуют расширения для браузера, которые дадут вам понять, работает он или нет.
В настоящее время Дафна поддерживает только «обычные» запросы через HTTP/2; пока нет поддержки расширенных функций, таких как Server Push. Однако это приведет к гораздо более быстрому соединению и снижению накладных расходов.
Если у вас есть обратный прокси-сервер перед вашим сайтом для обслуживания статических файлов или чего-то подобного, HTTP/2 будет работать только в том случае, если этот прокси понимает и правильно передает соединение.
Чтобы установить корневой путь для Дафны, что эквивалентно настройке WSGI SCRIPT_NAME
, у вас есть два варианта:
Daphne-Root-Path
с желаемым корневым путем в виде значения ASCII в кодировке URL. Этот заголовок не будет передаваться приложениям.--root-path
с желаемым корневым путем в виде значения ASCII в кодировке URL. Заголовок имеет приоритет, если оба установлены. Как и в случае с SCRIPT_ALIAS
, значение должно начинаться с косой черты, но не заканчиваться ею; например:
дафна --root-path=/forum django_project.asgi:application
Дафне требуется Python 3.9 или более поздней версии.
Пожалуйста, обратитесь к основным каналам, участвующим в документации.
Чтобы запускать тесты, убедитесь, что вы установили дополнительные tests
вместе с пакетом:
компакт-диск Дафна/ pip install -e '.[tests]' pytest
Чтобы сообщить о проблемах безопасности, напишите по адресу [email protected]. Для подписей GPG и дополнительной информации о процессах безопасности см. https://docs.djangoproject.com/en/dev/internals/security/.
Чтобы сообщить об ошибках или запросить новые функции, откройте новый выпуск GitHub.
Этот репозиторий является частью проекта Channels. Информацию о пастухе и команде технического обслуживания см. в файле readme основного канала.