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 '.[测试]' py测试
要报告安全问题,请联系 [email protected]。有关 GPG 签名和更多安全流程信息,请参阅 https://docs.djangoproject.com/en/dev/internals/security/。
要报告错误或请求新功能,请打开新的 GitHub 问题。
该存储库是 Channels 项目的一部分。对于牧羊人和维护团队,请参阅主要频道自述文件。