Django 频道私人聊天服务器

时间:2021-04-09 11:23:35

标签: python-3.x django websocket django-channels asgi

我是 Django 频道和 ASGI 应用程序本身的新手,所以我对如何构建私人聊天应用程序感到有些困惑。

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

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

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

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

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

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

感谢任何建议。

1 个答案:

答案 0 :(得分:0)

我认为您的选项 3 是正确的,让您的通道层名称包含用户 ID。然后,无论何时连接,消费者都可以订阅此内容。

如果您想要持久性以便在您上线时可以阅读在线消息,我建议您考虑使用 DCRF 并设置对 Messages DB 记录过滤的订阅(按收件人 = 用户)。如果您对此功能集感兴趣并添加评论,这将在添加消息时向您发送通知,我将使用完整的代码示例更新此答案。

相关问题