2

我是 Django 频道和 ASGI 应用程序本身的新手,所以在构建私人聊天应用程序时我有点困惑。

私人聊天的教程不多,都是针对聊天室和广播的。我对如何进行私人聊天几乎没有什么想法,但我不确定采用哪种方法。

  1. 我的第一个想法是不使用通道层并单独处理每个连接。我的意思是每次用户来到聊天应用程序时,它都会打开一个名为 chat__{userid} 的连接,如果 user_A 向 user_B 发送消息,它将首先检查 user_A 是否有权向 user_B 发送消息,然后调用 send user_B 上的方法,在发送消息后将确认发送回 user_A。

上述实现存在问题,如果用户打开不同的选项卡,我应该如何处理。

  1. 要使用 channel_layers 建立用户之间的连接,如果他们在彼此聊天时都在线,但是当用户与多个用户聊天时会出现问题,我是否需要为每个对话打开多个 WebSocket 连接。这将解决多个选项卡和会话问题,因为我可以将它们全部添加到同一个通道层中。

  2. 第三种方法类似于第一种方法,但不同之处在于这次使用通道层,以便单个用户的所有会话都可以在一个通道层中,并且我可以将消息广播到同一用户的所有会话。

我认为第三种方法适用于这种情况,但正如我上面提到的,我在 ASGI 应用程序方面没有太多经验,也不知道哪种方法最有效。

任何建议表示赞赏。

4

1 回答 1

0

我认为您的选项 3 是正确的,让您的频道层名称包含用户 ID。然后,每当您连接消费者时,都可以订阅它。

如果您想要持久性以便在您上网时可以阅读在线消息,我建议您研究使用DCRF并设置订阅消息数据库记录过滤的订阅者 = 用户。如果您对此功能集感兴趣并添加评论,则会在添加消息时向您发送通知,我将使用完整的代码示例更新此答案。

于 2021-04-11T01:33:29.333 回答