一、实战:构建实时聊天室
环境准备
下面将使用 Django Channels 构建一个多用户实时聊天室。Django Channels的介绍、安装与配置,参考上篇。
实现 WebSocket 消费者
创建mysite\myapp_infra\websocket\consumers.py文件,这是处理 WebSocket 连接的核心。主要实现了如下方法:
connect:处理新连接,验证用户token,将用户通道写入缓存,并加入默认组disconnect:处理连接断开,删除用户的缓存通道记录,将用户从所在的房间组中移除receive:处理接收到的消息。首先进行心跳检测(ping/pong),然后验证用户身份,解析两层 JSON 结构的消息内容。根据消息类型demo-message-send处理文本消息:若指定接收用户则单发,否则群发广播。broadcast_message:处理群发消息,从事件中提取payload数据并发送给所有连接的客户端single_message:处理单发消息,从事件中提取payload数据并发送给指定的客户端
配置 WebSocket 路由
创建mysite\myapp_infra\websocket\routing.py文件,定义 WebSocket 的 URL 路由
然后在项目的mysite\mysite\asgi.py配置中添加 ASGI 路由
创建聊天界面模板
以Vue3界面为例,代码实现了一个 WebSocket 客户端界面,功能包括:
- 连接控制:显示连接状态、开启/关闭 WebSocket 连接。
- 消息发送:输入消息内容并选择接收人(单发或群发),点击发送按钮通过 WebSocket 发送消息。
- 消息接收与展示:监听 WebSocket 返回的数据,解析不同类型的消息(如单发、群发、系统通知)并在右侧列表中倒序展示。
- 用户列表获取:页面加载时获取用户列表用于选择消息接收人。

实现效果
使用 ASGI 运行项目
使用不同的浏览器,分别登录不同的用户,实现实时互发消息。

二、生产环境部署
Nginx 配置
使用 Nginx 作为反向代理,添加以下配置来处理 WebSocket 连接。这段配置告诉 Nginx 如何正确处理 WebSocket 升级请求。
使用 Gunicorn+Uvicorn 部署
Gunicorn(全称 Green Unicorn)是一个用于 UNIX 的 高性能 Python WSGI HTTP 服务器。Gunicorn只能用于 Linux 系统,Windows上无法使用。
安装
Gunicorn 作为进程管理器,配合 Uvicorn 工作进程处理 ASGI 应用
- -w 工作进程的数量。默认启动 1 个 Worker 进程
- -k 要运行的工作进程类型。
- -b 指定要绑定的服务器套接字。
优化 Worker 数量
Gunicorn Worker 数量的设置对性能影响很大,推荐的公式是:(CPU核心数 × 2) + 1。我们可以编写一个启动脚本来自动计算最佳 Worker 数量
添加执行权限并运行
您正在阅读的是《Django从入门到实战》专栏!关注不迷路~

被折叠的 条评论
为什么被折叠?



