websocket - 使用 Web 套接字向 Django channel 中的多个组发送消息

标签 websocket django-channels

我有一个聊天应用程序,我可以在其中实时发送消息。我使用 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/

相关文章:

java - SimpleWebSocket 类型中的 setBroadcaster(Broadcaster) 在 Grizzly java 中不可见

django - 在 nginx 上部署 django channel

javascript - 客户端重新加载页面时如何修复服务器故障?

java - 适用于移动客户端应用程序的 SignalR webSockets

python - Django 完全忽略异步测试(Django channel )

django - 使用 Apache2 和 Daphne 部署 django-channels

python - 新的聊天消息通知 Django Channels

javascript - 通过 Websocket 连接将文件上传到 Django Channels(来自 React Native 应用程序)

java - 同一连接的客户端和服务器上的不同端口号

javascript - Node js 连接两个套接字,以便检索更容易