Django中WebSocket长连接
一、首先安装必要依赖:
pip install channels channels-redis
二、核心代码实现
1.ASGI配置启用WebSocket协议并设置认证中间件
import os from django.core.asgi import get_asgi_application from channels.routing import ProtocolTypeRouter, URLRouter from channels.auth import AuthMiddlewareStack from django.urls import re_path from .consumers import NotificationConsumer os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project.settings') application = ProtocolTypeRouter({ "http": get_asgi_application(), "websocket": AuthMiddlewareStack( URLRouter([ re_path(r'ws/notifications/$', NotificationConsumer.as_asgi()), ]) ), })
2.消费者实现基础消息收发和连接确认功能
import json from channels.generic.websocket import AsyncWebsocketConsumer class NotificationConsumer(AsyncWebsocketConsumer): async def connect(self): await self.accept() await self.send(text_data=json.dumps({ 'type': 'connection_established', 'message': 'WebSocket连接成功' })) async def disconnect(self, close_code): pass async def receive(self, text_data): data = json.loads(text_data) await self.send(text_data=json.dumps({ 'type': 'echo_response', 'message': f'收到消息: {data["message"]}' }))
3、关键配置检查
INSTALLED_APPS = [ ..., 'channels', ] ASGI_APPLICATION = 'your_project.asgi.application' CHANNEL_LAYERS = { "default": { "BACKEND": "channels.layers.InMemoryChannelLayer" } }
4、启动命令
daphne your_project.asgi --port 8000
若报错,可尝试以下备选方案:
使用Uvicorn替代Daphne:uvicorn application.asgi:application --ws websockets
5、校验 Uvicorn WebSocket 连接
- 设置服务器 URL:在 "Server URL" 字段中输入
ws://127.0.0.1:8000/ws/notifications/。![]()


浙公网安备 33010602011771号