文章目录
- daphne:为 Django Channels 打造的 ASGI 协议服务器
- 1、这工具是干什么的
- 2、为什么需要它
- 3、怎么用
- 4、HTTP/2 支持
- 5、Python 版本要求
- 6、适合谁用
daphne:为 Django Channels 打造的 ASGI 协议服务器
daphne 在 GitHub 上已经拿到 2,669 Star。
Django 团队开发了这套 HTTP、HTTP2 和 WebSocket 协议服务器,专门给 Django Channels 提供底层支持。
1、这工具是干什么的
就一件事:把 ASGI 应用跑起来。
它能自动协商协议类型,不需要给 WebSocket 端点加 URL 前缀,也不用在代码里区分请求走哪个协议。一个服务同时处理 HTTP 请求和 WebSocket 连接。
2、为什么需要它
Django Channels 引入了 ASGI 规范,让 Django 能够处理 WebSocket 等异步协议。但规范需要一个服务器来实现,daphne 就是这个角色。
在 daphne 出现之前,Django 应用只能跑 WSGI,处理不了长连接和实时通信。daphne 补上了这块,让开发者可以用同一套框架同时处理 HTTP 请求和 WebSocket 连接。
3、怎么用
安装后直接指向 ASGI 应用:
daphne-b0.0.0.0-p8001django_project.asgi:application默认绑定 localhost:8000。如果跑在反向代理后面,可以用 UNIX Socket:
daphne-u/tmp/daphne.sock django_project.asgi:application在进程管理器里可以用文件描述符传递:
daphne--fd5django_project.asgi:application需要更灵活的端口控制,可以用 Twisted endpoint 语法:
daphne-essl:443:privateKey=key.pem:certKey=crt.pem django_project.asgi:application全部参数可以用-h查看。
4、HTTP/2 支持
daphne 原生支持 HTTP/2 终止。需要安装 Twisted 的 http2 和 tls 扩展:
pipinstall-U"Twisted[tls,http2]"由于浏览器只支持基于 TLS 的 HTTP/2,需要启用 SSL。系统要求 OpenSSL 1.0.2 以上。
启动后可以在日志中看到 “HTTP/2 support enabled” 提示。HTTP/2 在浏览器开发者工具里看不出明显区别,可以用浏览器扩展确认是否生效。
目前只支持普通请求,还没有 Server Push。但连接速度和开销已有明显改善。
5、Python 版本要求
daphne 需要 Python 3.9 或更高版本。
6、适合谁用
- 在用 Django Channels 做 WebSocket 或实时通信的开发者
- 从 WSGI 迁移到 ASGI 的 Django 项目
- 需要 HTTP/2 支持的 Python Web 服务
daphne 是 Django Channels 生态的核心组件,由 Django 团队维护。问题和特性建议可以提交 Issue。
Web 服务
daphne 是 Django Channels 生态的核心组件,由 Django 团队维护。问题和特性建议可以提交 Issue。