我有一个聊天应用程序,我可以在其中实时发送消息。我使用 Django channel 进行 websocket 连接。
它是这样工作的:假设用户 1 正在发送消息,另外五个人将立即看到该消息。这是因为所有用户都在添加到 channel 的同一个房间 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),
})
现在这是我卡住的场景:
当我向 chatroom#1 发送消息时,不仅我想更新 chtroom#1(我可以),而且其他聊天室中的用户也需要被通知 chatroon#1 有 1 条消息。
例如,用户 1 是聊天室#1 和聊天室#2 的成员。当他在聊天室#2 中活跃时,聊天室#1 会收到一些消息。目前无法通知此用户,因为根据上述设置,只有一个聊天室 self.room_group_name
正在接收更新。
我想知道如何向我的 channel 添加不同的房间,以便聊天室 #1 和 #2 都会收到通知:
感谢任何提示
谢谢,
最佳答案
您需要做的是将房间和用户之间的关系存储在数据库中的某处。基本上,您应该存储哪个用户属于哪个房间。当用户连接到您的 websocket 时(在 django-channels
中的 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事件。
关于websocket - 使用 Web 套接字向 Django channel 中的多个组发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62274594/