如何办理在Django频道的所有聊天记录单WebSocket连接

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

我要让例如WhatsApp聊天应用,我想使使用Django渠道来处理所有的实时更新后端服务器。

我一直在探索各种渠道,但我无法弄清楚一件事我如何管理为每个用户单独WebSocket连接(单个端点),并且仍然从所有的聊天记录接收消息他是实时的一部分。按我目前的理解,我可以添加频道(对应于用户的网络套接字连接),以不同的信道组,但是如果用户是什么很多群体的一部分(主要是有资格接收来自各种聊天更新)?我应该是频道添加到所有的组,他可以的,一旦建立连接,或者是有没有像一个在我脑海中的任何解决办法的一部分:

  1. 存储与数据库中的每个用户的频道列表。
  2. 使for循环,使得每当由服务器接收到消息时,它发送消息给对应的WebSocket涉及到接收该消息的每个用户连接?

任何帮助表示赞赏。提前致谢。

django websocket django-channels
1个回答
1
投票

是的,一个简单的聊天系统,你应该只添加用户的频道名称他订阅的组。

但是,你肯定会需要在数据库中的聊天系统模型更复杂的系统。比方说,你拥有模特聊天,ChatMember和消息。当用户连接到WebSocket的,他并不需要指定任何聊天,因为它为通用连接。通过客户端发送的任何消息必须指定聊天,这样你就可以通过聊天成员环路和消息转发给所有谁是目前连接。

你怎么知道谁是当前连接?这是棘手的部分。在我的建筑,我有一组为每个用户,有点像一个收件箱。组名是从用户ID生成。每个用户都可以有多个连接,说手机,网络等从用户来的所有连接都被添加到用户组和用户的活动连接数被保存在收件箱模式。随着新的连接,它递增和断开期间递减。

因此,知道哪些聊天会员正在线上,我可以检查用户的收件箱中有ATLEAST一个连接。如果他是在网上我将消息转发给他的ibox的组,否则我将消息存储在他的收件箱。每当用户连接,他发送的所有邮件在他的收件箱和收件箱中被清除。

这只是一个方式来实现这一个例子,但你也可以想出一个自定义的架构或改善它。

© www.soinside.com 2019 - 2024. All rights reserved.