django-channels:跟踪“房间”中的用户

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

TL; DR-如何维护每个会议室中的用户列表,以便可以将该数据发送到前端以显示此会议室中的参与者列表。

我正在设计一个协作Web应用程序,该Web应用程序使用django通道在浏览器和服务器之间进行websocket通信。一个房间可以由一个以上的用户加入,并且每个用户都应该知道房间中的每个其他用户。我将如何使用django-channels(v2)实现此目标?

我已经阅读了文档,并在线获得了一些示例项目,但是它们都没有添加类似的功能。我也知道django-channels-presence,但是该项目似乎没有得到积极维护,因此我并没有真正在意使用该项目的示例。

这是到目前为止我要提出的内容:

-对于每个房间,我在数据库中创建一个对象,这些对象可以跟踪房间中的用户。因此,例如对于WS消费者的connect()方法,我可以进行get_or_create_room()调用和room.add_participant(self.user_name)(或从作用域中获取),而在disconnect()方法中,我可以将自己从房间中移开。但是,这样做的问题是我可能最终会创建比赛条件?我认为?另外,由于我是从ORM中获取对象,因此必须确保每次使用该对象之前,都必须从DB中重新获取它,因为它可能(并且将很快)变得过时。这似乎一点都不理想。

-我可以想到的另一种方法是将数据附加到使用者中的self.channel_layer,在其中我可以执行setattr(self.channel_layer, f'users_{room_id}', {})之类的操作,并为每个进入和离开的用户维护此字典。这听起来也不是很安全,而且我也没有看到任何人在使用它,所以我不确定。

对此将提供任何帮助。如果有人可以指出我,我也希望能够看到现有应用程序如何做到这一点?

TL; DR-如何维护每个会议室中的用户列表,以便可以将数据发送到前端以显示此会议室中的参与者列表。我正在设计一个协作的Web应用程序,它......>

django django-channels django-channels-presence
1个回答
0
投票

简而言之,无法向群组中的成员询问频道,因此您要么需要:

  • 使用时间戳将一些信息写入数据库,以便您可以查看它是否旧了
© www.soinside.com 2019 - 2024. All rights reserved.