Files
sixGuoDjango/django_channels/consumers.py
T
2026-08-02 14:07:04 +08:00

44 lines
2.0 KiB
Python

"""2"""
import pydash
from asgiref.sync import async_to_sync
from sixGuoDjango import RedisClientManager
redia_socket_5 = RedisClientManager().get_client(db_name="redis_5")
"""consumers"""
import orjson
from channels.generic.websocket import WebsocketConsumer
class ChatConsumer(WebsocketConsumer):
def connect(self):
print("连接请求进来了", self.channel_name)
room_id = pydash.get(obj=self.scope, path="url_route.kwargs.room_id")
self.accept() # 接受连接
redia_socket_5.set(name=room_id, value=self.channel_name)
# self.channel_layer.group_add(group="demo_name", channel=self.channel_name)
async_to_sync(self.channel_layer.group_add)(group="demo_name", channel=self.channel_name)
async_to_sync(self.channel_layer.group_add)(group="demo_xiaozizi", channel=self.channel_name)
def receive(self, text_data=None, bytes_data=None):
# text_data 已经是字符串,直接使用
if text_data == "ping":
self.send(text_data=orjson.dumps({"type": "监听心跳", "text": {"xiao": "xiaozizi"}},
option=orjson.OPT_SORT_KEYS).decode(encoding="utf-8"))
else:
# 处理其他消息
# print("判断生成了哟", text_data)
self.send(text_data=orjson.dumps({"type": "chat_msg", "text": {"xiao": "xiaozizi"}},
option=orjson.OPT_SORT_KEYS).decode(encoding="utf-8"))
def disconnect(self, code):
room_id = pydash.get(obj=self.scope, path="url_route.kwargs.room_id") # 断开连接后可以拿到参数
print("连接断开,code:", code, room_id)
async_to_sync(self.channel_layer.group_discard)(group="demo_name", channel=self.channel_name)
async_to_sync(self.channel_layer.group_discard)(group="demo_xiaozizi", channel=self.channel_name)
def update_更新用户头像(self, event):
self.send(text_data=orjson.dumps(event, option=orjson.OPT_SORT_KEYS).decode(encoding="utf-8"))