"""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"))