讲师中心 微信公众号
AI工具推荐 视频效率加速

Django集成WebSocket教程 Django Channels安装与配置指南【案例】

星明姑娘_8226

星明姑娘_8226

发布时间:2026-05-31 17:10:09

|

443人浏览过

|

来源于php中文网

原创

Django 本身不支持 WebSocket,必须使用 Channels 才能安全、可维护地集成;pip install "channels[daphne]" 是生产就绪的最小依赖组合,因 daphne 是官方推荐的 ASGI 服务器,原生支持 WebSocket 协议升级协商,缺装将导致部署时连接立即断开。

django集成websocket教程 django channels安装与配置指南【案例】

直接上结论:Django 本身不支持 WebSocket,必须用 channels 才能安全、可维护地集成;别碰自己手写 websockets 库 + Django 的“轻量方案”,它绕过 Django 认证/权限/ORM 异步限制,上线后大概率卡在用户绑定或数据库并发上。

安装 channels 时 pip 命令为什么必须带 [daphne]?

pip install "channels[daphne]" 是生产就绪的最小依赖组合。不加 [daphne] 会导致:

  • 本地开发能跑,但部署时 runserver 不处理 WebSocket 协议(HTTP 200 但连接立刻断开)
  • daphne 是 Channels 官方推荐的 ASGI 服务器,原生支持 ws:// 和 wss:// 升级协商;uvicorn 虽然也能用,但需额外配置中间件兼容 Django 的 scope 结构
  • 漏装会触发 ImportError: No module named 'daphne' when running daphne —— 这个错误常被误判为配置问题,其实是缺包

settings.py 中 INSTALLED_APPS 的顺序为什么不能错?

'daphne' 必须放在 'django.contrib.auth' 之前,否则 AuthMiddlewareStack 初始化失败,WebSocket 连接里 self.scope["user"] 永远是 AnonymousUser。

正确顺序示例:

Django Wrap
Django Wrap

强戈环形山: q15040409-刻画家功能概述强戈环形山: q15040409-刻画家是一项面向实际任务的技能,主要用于平顶山: 维西翁: 1:1.0. 塔格斯: rap.github: 自动化。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。核心要点使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。从功能定位来看,该

下载
INSTALLED_APPS = [
    "daphne",
    "django.contrib.admin",
    "django.contrib.auth",
    "channels",  # 注意:channels 可以在 daphne 之后,但必须在 auth 之后
    # ... 其他 app
]
  • daphne 提供 ASGI 入口,要早于任何依赖它的中间件
  • channels 本身不提供 ASGI server,只是协议路由和 channel layer 抽象,位置相对宽松
  • 如果用 redis 作 channel layer,channels_redis 必须出现在 channels 之后,否则 CHANNEL_LAYERS 配置无效

asgi.py 里 ProtocolTypeRouter 的 "http" 键名不能写成 "https"

ASGI 协议层不区分 HTTP/HTTPS,加密由反向代理(Nginx、Cloudflare)处理。"http": django_asgi_app 是固定写法,写成 "https" 或 "websocket" 会导致整个 HTTP 请求 404 —— 因为 Daphne 根本不识别这个键。

  • WebSocket 路由必须单独配在 "websocket" 键下,且必须用 AuthMiddlewareStack 包裹,否则无法拿到登录态
  • 常见错误:application = URLRouter([...]) 直接赋值 —— 缺少 ProtocolTypeRouter 外壳,HTTP 和 WS 无法共存
  • 调试技巧:启动后访问 http://localhost:8000/ws/chat/ 应返回 404(正常),而 ws://localhost:8000/ws/chat/ 才应建立连接;如果 HTTP 地址返回 200,说明 routing 配置没生效

Consumer 类里 self.channel_layer.group_send 发不出消息?

90% 是 channel layer 没配 Redis 或配置未生效。Django Channels 默认用内存 channel layer(InMemoryChannelLayer),只适用于单进程开发,多 worker 或重启后消息丢失。

  • 检查 CHANNEL_LAYERS 是否在 settings.py 顶层定义(不能缩进、不能放在 if 分支里)
  • Redis 连接字符串格式必须是 redis://127.0.0.1:6379/0,末尾的 /0 是 database ID,漏写会连到默认 db 0 以外的位置
  • 运行 python manage.py showmigrations channels 确认 migrations 已加载(Channels 4+ 不需要 migrate,但旧版需执行)
  • Consumer 中调用 group_send 前,先确认 self.channel_layer 不为 None,否则静默失败

真正麻烦的不是配通,而是 Channel Layer 在负载均衡或多实例部署时,必须用 Redis —— 内存模式下 group_send 只发给本机 worker,其他机器上的连接收不到。这点容易被开发环境掩盖,上线才暴露。

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
C语言变量命名
C语言变量命名

c语言变量名规则是:1、变量名以英文字母开头;2、变量名中的字母是区分大小写的;3、变量名不能是关键字;4、变量名中不能包含空格、标点符号和类型说明符。php中文网还提供c语言变量的相关下载、相关课程等内容,供大家免费下载使用。

3649

2023.06.20

c语言入门自学零基础
c语言入门自学零基础

C语言是当代人学习及生活中的必备基础知识,应用十分广泛,本专题为大家c语言入门自学零基础的相关文章,以及相关课程,感兴趣的朋友千万不要错过了。

2448

2023.07.25

c语言运算符的优先级顺序
c语言运算符的优先级顺序

c语言运算符的优先级顺序是括号运算符 > 一元运算符 > 算术运算符 > 移位运算符 > 关系运算符 > 位运算符 > 逻辑运算符 > 赋值运算符 > 逗号运算符。本专题为大家提供c语言运算符相关的各种文章、以及下载和课程。

1380

2023.08.02

c语言数据结构
c语言数据结构

数据结构是指将数据按照一定的方式组织和存储的方法。它是计算机科学中的重要概念,用来描述和解决实际问题中的数据组织和处理问题。数据结构可以分为线性结构和非线性结构。线性结构包括数组、链表、堆栈和队列等,而非线性结构包括树和图等。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1318

2023.08.09

c语言random函数用法
c语言random函数用法

c语言random函数用法:1、random.random,随机生成(0,1)之间的浮点数;2、random.randint,随机生成在范围之内的整数,两个参数分别表示上限和下限;3、random.randrange,在指定范围内,按指定基数递增的集合中获得一个随机数;4、random.choice,从序列中随机抽选一个数;5、random.shuffle,随机排序。

1416

2023.09.05

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

2358

2023.09.20

c语言get函数的用法
c语言get函数的用法

get函数是一个用于从输入流中获取字符的函数。可以从键盘、文件或其他输入设备中读取字符,并将其存储在指定的变量中。本文介绍了get函数的用法以及一些相关的注意事项。希望这篇文章能够帮助你更好地理解和使用get函数 。

3900

2023.09.20

c数组初始化的方法
c数组初始化的方法

c语言数组初始化的方法有直接赋值法、不完全初始化法、省略数组长度法和二维数组初始化法。详细介绍:1、直接赋值法,这种方法可以直接将数组的值进行初始化;2、不完全初始化法,。这种方法可以在一定程度上节省内存空间;3、省略数组长度法,这种方法可以让编译器自动计算数组的长度;4、二维数组初始化法等等。

18455

2023.09.22

Docker Desktop怎么设置端口映射
Docker Desktop怎么设置端口映射

本专题聚焦Docker Desktop容器端口映射与访问配置,整理从创建容器、设置端口绑定到验证本地服务访问的操作流程。针对端口被占用、映射配置错误、容器服务无法访问等情况,也提供相应的检查方向,方便用户完成端口配置。

0

2026.11.03

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebSocket手册
WebSocket手册

共0课时 | 0人学习

Webman中文手册
Webman中文手册

共0课时 | 0人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn