django asgi(http/websocket)服务器
daphne的Python项目详细描述
daphne是一个http、http2和websocket协议服务器,用于 ASGI和 ASGI-HTTP, 为Django频道开发。
它支持协议的自动协商;不需要URL 前缀以确定WebSooT端点与HTTP端点。
注意:daphne 2与channels 1.x应用程序不兼容,仅与 频道2.x和其他asgi应用程序。安装1.x版本的Daphne 对于通道1.x支持
运行
只需将daphne指向您的asgi应用程序,并且可以选择 设置绑定地址和端口(默认为localhost,端口8000):
daphne -b 0.0.0.0 -p 8001 django_project.asgi:application
如果打算在代理服务器后面运行daphne,可以使用unix 两个之间通信的插座:
daphne -u /tmp/daphne.sock django_project.asgi:application
如果Daphne在流程管理器中运行,则可能 希望它绑定到从父进程传下来的文件描述符。 为此,您可以使用–fd标志:
daphne --fd 5 django_project.asgi:application
如果希望对端口/套接字绑定进行更多控制,可以返回到 使用twisted’s endpoint description strings 通过使用–endpoint(-e)标志,可以多次使用。 该行将在端口443上启动一个ssl服务器,假设key.pem和crt.pem 存在于当前目录中(需要安装可安装文件):< > >
daphne -e ssl:443:privateKey=key.pem:certKey=crt.pem django_project.asgi:application
端点甚至允许您使用txacme端点语法来获取自动证书 从“让我们加密”,您可以在http://txacme.readthedocs.io/en/stable/上阅读更多关于加密的信息。
要查看所有可用的命令行选项,请使用-h标志运行daphne
支持http/2
Daphne支持本机终止HTTP/2连接你会的 不过,需要做一些事情才能让它工作。首先,你需要 确保安装twistedhttp2和tls附加组件:
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 INFO Starting server at ssl:port=8000:privateKey=privkey.pem:certKey=cert.pem, channel layer django_project.asgi:channel_layer. 2017-03-18 19:14:02,742 INFO HTTP/2 support enabled
然后,连接一个支持http/2的浏览器,一切都应该 工作。通常很难判断http/2是否有效,正如daphne给您的日志 将是相同的(毕竟是HTTP),而且大多数浏览器都不会让它变得明显 在他们的网络检查器窗口中。有一些浏览器扩展允许 你很清楚这是否有效
daphne目前只支持http/2上的“普通”请求;没有 支持服务器推送等扩展功能。然而,这将导致 更快的连接速度和更低的开销。
如果您的站点前面有一个反向代理来提供静态文件或 类似地,只有当代理理解并通过 连接正确。
根路径(脚本名)
为了设置Daphne的根路径,它相当于 wsgiSCRIPT_NAME设置,您有两个选项:
- 传递头值Daphne-Root-Path,所需根路径为 URLencoded ASCII值此头将不会传递给应用程序。
- 将--root-path命令行选项设置为所需的根路径 URLencoded ASCII值
如果两者都已设置,则标题优先。与SCRIPT_ALIAS一样,值 应该以斜线开头,但不能以斜线结尾;例如:
daphne --root-path=/forum django_project.asgi:application
python支持
Daphne需要Python3.5或更高版本。
维护和安全
要报告安全问题,请联系security@djangoproject.com。对于GPG 签名和更多安全过程信息,请参见 https://docs.djangoproject.com/en/dev/internals/security/。
要报告错误或请求新功能,请打开一个新的GitHub问题
此存储库是channels项目的一部分。对于牧羊人和维护团队,请参见 main Channels readme