使用网络套接字将消息发送到Django通道中的多个组

问题描述 投票:0回答:1

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

这是它的工作方式:假设user1正在发送一条消息,另外五个人将立即看到该消息。这是因为所有用户都在添加到频道的同一个房间room_group_name中:

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发送消息时,不仅要更新chtroom#1(我可以更新),而且还需要通知其他聊天室中的用户,聊天室#1中有1条消息。

作为示例,用户是聊天室1和聊天室2的成员。当他活跃在2号聊天室中时,1号聊天室收到一些消息。当前无法通知此用户,因为根据上述设置,只有一个聊天室self.room_group_name正在接收更新。

[我想知道如何在我的频道中添加不同的房间,以便同时通知#1和#2聊天室:

任何提示表示赞赏

谢谢,

websocket django-channels
1个回答
0
投票

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

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事件。

© www.soinside.com 2019 - 2024. All rights reserved.