0

0

Django ASGI怎么跑_Daphne或Uvicorn支持异步与WebSocket

P粉602998670

P粉602998670

发布时间:2026-03-17 12:57:11

|

370人浏览过

|

来源于php中文网

原创

Django用ASGI跑不起来WebSocket是因为默认runserver是WSGI模式,不处理WebSocket;需Django 3.1+、ASGI配置(asgi.py中ProtocolTypeRouter)、channels中间层及正确路由,缺一不可。

django asgi怎么跑_daphne或uvicorn支持异步与websocket

为什么Django用ASGI跑不起来WebSocket

因为默认的runserver是WSGI模式,压根不处理WebSocket连接——它连websocket.connect事件都收不到。ASGI不是换个命令就行,得换服务器、改配置、还要确认Django版本支持。

  • Django 3.1+ 才原生支持ASGI应用入口(asgi.py),老版本得靠django-channels兜底
  • channels不是可选插件,是WebSocket的必需中间层:Django本身不解析ws://协议,全靠它把ASGI消息路由到consumer
  • 即使用了Uvicorn,如果没装channels或没在INSTALLED_APPS里加channels,请求直接404,连错误日志都不报

Daphne和Uvicorn选哪个跑ASGI

Uvicorn更快,但Daphne对Channels更“懂行”——尤其在多进程、连接复用、HTTP/2支持上,Daphne是Channels官方推荐的。

  • uvicorn启动时必须显式指定--factory或加载asgi:application,漏掉asgi.py路径就报AssertionError: No application configured
  • daphne默认就认asgi.py,但要求channels版本匹配:Django 4.2建议用channels>=4.0.0,低版本会卡在get_channel_layer()初始化失败
  • 本地开发用uvicorn asgi:application --reload最顺;上生产别只图快,daphne -b 0.0.0.0:8000 myproject.asgi:application更稳,尤其有长连接场景

ASGI配置里最容易漏的三件事

不是写了asgi.py就能跑,Django的ASGI支持是分层激活的:设置、路由、消费者,缺一层WebSocket就静默失败。

Spell.tools
Spell.tools

高颜值AI内容营销创作工具

下载
  • settings.py里必须有ASGI_APPLICATION = "myproject.asgi.application",拼错app名或路径,Uvicorn启动成功但所有WebSocket请求返回500
  • asgi.py里不能只写application = get_asgi_application(),得套一层ProtocolTypeRouter,否则HTTP能通,WS直接被忽略
  • routing.py里WebSocket路由必须用URLRouter包着,写成URLPattern格式(比如re_path(r"^ws/", ...)),正则末尾少个$会导致路由错配,连接建立后立刻断开

怎么验证WebSocket真连上了

别只看浏览器控制台没报错,得抓底层行为:连接是否进consumer、channel layer有没有发消息、连接是否被ASGI服务器中途切断。

  • 在consumer的connect(self)里加print("WS connected"),启动时用uvicorn --log-level debug,看到connected to client才算真通
  • redis-cli monitor(如果channel layer是Redis)看有没有PUBLISH动作,没有说明消息根本没进channel layer
  • 浏览器用new WebSocket("ws://localhost:8000/ws/")测试时,如果onopen触发但onmessage永远不触发,大概率是consumer里漏了self.accept()——这是最常被忽略的一行

异步Consumer里self.accept()必须是awaitable,写成self.accept()不加await,连接就卡在pending状态,浏览器看起来像“已连接”实则不可用。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python Web 框架 Django 深度开发
Python Web 框架 Django 深度开发

本专题系统讲解 Python Django 框架的核心功能与进阶开发技巧,包括 Django 项目结构、数据库模型与迁移、视图与模板渲染、表单与认证管理、RESTful API 开发、Django 中间件与缓存优化、部署与性能调优。通过实战案例,帮助学习者掌握 使用 Django 快速构建功能全面的 Web 应用与全栈开发能力。

169

2026.02.04

python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

193

2023.09.27

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

19

2026.02.03

Golang channel原理
Golang channel原理

本专题整合了Golang channel通信相关介绍,阅读专题下面的文章了解更多详细内容。

261

2025.11.14

golang channel相关教程
golang channel相关教程

本专题整合了golang处理channel相关教程,阅读专题下面的文章了解更多详细内容。

352

2025.11.17

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1010

2023.11.02

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

675

2023.11.14

mongodb和redis哪个读取速度快
mongodb和redis哪个读取速度快

redis 的读取速度比 mongodb 更快。原因包括:1. redis 使用简单的键值存储,而 mongodb 存储 json 格式的数据,需要解析和反序列化。2. redis 使用哈希表快速查找数据,而 mongodb 使用 b-tree 索引。因此,redis 在需要高性能读取操作的应用程序中是一个更好的选择。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

501

2024.04.02

c++ 字符处理
c++ 字符处理

本专题整合了c++字符处理教程、字符串处理函数相关内容,阅读专题下面的文章了解更多详细内容。

0

2026.03.17

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Django 教程
Django 教程

共28课时 | 5.1万人学习

Django DRF 源码解析
Django DRF 源码解析

共21课时 | 1.5万人学习

Django参考手册
Django参考手册

共0课时 | 0.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号