Websocket 使用Web套接字向Django通道中的多个组发送消息

Websocket 使用Web套接字向Django通道中的多个组发送消息,websocket,django-channels,Websocket,Django Channels,我有一个聊天应用程序,我可以在其中实时发送消息。我使用Django通道进行websocket连接 下面是它的工作原理:假设user1正在发送一条消息,另外五个人将立即看到该消息。这是因为所有用户都在同一个房间房间组\u名称,该名称添加到频道: await self.channel_layer.group_add( self.room_group_name, self.channel_name ) 然后,当结果消息发送给他们时: await self.channel_layer.gro

我有一个聊天应用程序,我可以在其中实时发送消息。我使用Django通道进行websocket连接

下面是它的工作原理:假设user1正在发送一条消息,另外五个人将立即看到该消息。这是因为所有用户都在同一个房间房间组\u名称,该名称添加到频道:

await self.channel_layer.group_add(
    self.room_group_name, self.channel_name
)
然后,当结果消息发送给他们时:

 await self.channel_layer.group_send(
 self.room_group_name,
 {
  "type": "chat_message",
   "text": json.dumps(myresponse),
   })
下面是我遇到的一个情况:

当我向聊天室1发送消息时,我不仅要更新聊天室1(我可以),而且还需要通知其他聊天室的用户聊天室1有一条消息

例如,用户1是聊天室1和聊天室2的成员。当他活跃在聊天室2时,聊天室1会收到一些信息。目前无法通知此用户,因为根据上述设置,只有一个聊天室
self.room\u group\u name
正在接收更新

我想知道如何将不同的聊天室添加到我的频道中,以便聊天室1和聊天室2都会收到通知:

任何暗示都将不胜感激


谢谢,

您需要做的是将房间和用户之间的关系存储在数据库的某个位置。基本上,您应该存储哪个用户是哪个房间的一部分。当用户连接到您的websocket时(在
django频道的
connect
功能中),您应该将用户连接到它所属的所有房间,如下所示:

await self.accept()
self.joined_rooms = await self.get_rooms()
for room in self.joined_rooms:
    await self.channel_layer.group_add(
        'group_' + room.name,
        self.channel_name
    )

基本上,您不必仅将用户连接到当前处于活动状态的文件室用户,而可以将其连接到用户所属的所有文件室,这样,每当文件室/组中有任何活动时,他都会收到一个websocket事件。

如果用户在连接时加入文件室,该怎么办?是否应使用接收器识别相同的房间,并在需要时添加房间组?还有其他选择吗?