daphne:为 Django Channels 打造的 ASGI 协议服务器

文章目录

  • 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。