django asgi(http/websocket)服务器

daphne的Python项目详细描述


https://api.travis-ci.org/django/daphne.svghttps://img.shields.io/pypi/v/daphne.svg

daphne是一个http、http2和websocket协议服务器,用于 ASGIASGI-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.pemcrt.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连接你会的 不过,需要做一些事情才能让它工作。首先,你需要 确保安装twistedhttp2tls附加组件:

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或更高版本。

贡献

请参考 main Channels contributing docs

要运行测试,请确保已在电子包裹:

cd daphne/
pip install -e .[tests]
pytest

维护和安全

要报告安全问题,请联系security@djangoproject.com。对于GPG 签名和更多安全过程信息,请参见 https://docs.djangoproject.com/en/dev/internals/security/

要报告错误或请求新功能,请打开一个新的GitHub问题

此存储库是channels项目的一部分。对于牧羊人和维护团队,请参见 main Channels readme

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在DoublyLinkedList上实现迭代器   java如何获得ZoneDateTime时区的三个字母首字母缩写?   java Android中使用的PreferenceManager和SharedReference类是什么?   arraylist java宠物名和芯片号   java我可以使用正则表达式从短语中解析单词吗?   java Primefaces信息窗口标题   java Jetpack导航:如何从recyclerview适配器打开新片段?   Spring过滤器作为基于Java注释的bean   java在使用swing后,如何在swing中“X出”窗口?   java iText ColumnText设置矩形中的文本大小   java反射类NotFoundException   数组无法解释的“OutOfMemoryError:Java堆空间”错误和代码行为   java如何在Android中初始化类并将对象传递给构造函数?   java从文件创建2D ArrayList   java存储音乐的最佳位置/方法