django v: 3.2.9
channels v:3.0.4
1 pip install channels
2 pip install channels_redis ---必须安装
3 配置文件添加 channels 和 redis 数据库配置 和 asgi 配置
添加APP
INSTALLED_APPS = [
'channels',
]
添加redis
CHANNEL_LAYERS = {
'default': {
'BACKEND': 'channels_redis.core.RedisChannelLayer',
'CONFIG': {
"hosts": [('127.0.0.1', 6379)],
},
},
}
添加 asgi
WSGI 注释
# WSGI_APPLICATION = '项目名.wsgi.application'
ASGI_APPLICATION = '项目名.asgi.application'
4 修改 asgi 配置文件
import os
from django.core.asgi import get_asgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', '项目名.settings')
from channels.auth import AuthMiddlewareStack
from django.urls import path
from channels.routing import ProtocolTypeRouter, URLRouter
from 项目名.channels import ChatConsumer --- 这行注意 为websoke 类 调用时使用 .as_asgi()
application = ProtocolTypeRouter({
"http": get_asgi_application(),
'websocket': AuthMiddlewareStack(
URLRouter([path('ws/', ChatConsumer.as_asgi()), ])-- 此处时路由 完全可以独立
),
})
5 配置 ChatConsumer 类
同步
def connect(self):
# websocket建立连接时执行方法 self.accept() 意思是建立握手
self.accept()
# websocket断开时执行方法 self.close()意思是关闭握手
def disconnect(self, close_code):
self.close()
# 从websocket接收到消息时执行函数 self.send 意思是后端给前端发送消息
def receive(self, text_data):
text_data_json = json.loads(text_data)
message = f'结果:{text_data_json}'
self.send(text_data=json.dumps(
{
'message': message
}))
6 启动项目时一订要启动 redis 数据库
yum install redis
启动redis
service redis start
停止redis
service redis stop
查看redis运行状态
service redis status
查看redis进程
ps -ef | grep redis 5、设置redis为开机自动启动 chkconfig redis on
|