有关如何为聊天应用程序设计好的体系结构的建议?

ant*_*nt1 3 django chat node.js reactjs react-native

您好,我将实现一个社交聊天应用程序,该程序可以满足一些要求,但是我不确定该如何实现。

需要:

  • 应用程序“前端”应使用React Native编写

  • 支持端到端加密

  • 支持用户间的聊天

  • OAuth2.0

  • 推送通知

  • 历史

  • Django或Node后端

问题出在后端设计中。我正在考虑使用带有websockets的Node.js或带有通道的Django,但我不知道哪种存储聊天(如电报)的数据库设计很好,也不知道如何构建消息队列。

谁能给我一些有关聊天应用程序设计的提示?谢谢

Rub*_*con 5

这是我的建议

您实际上有3个选择:

  1. 从头开始构建所有内容(如您在最初的问题中所写)。

实际上,这并不重要,您可以使用Node.js Websockets,Django通道还是Rails Action Cable。它们将具有几乎相同的性能(或者Node.js可能会好一点)。您也可以为此使用任何数据库:MySQL,PostgreSQL或MongoDB。

例如,您可以具有以下数据库表结构:

对话内容

  • ID
  • created_at
  • Updated_at
  • 类型
  • 名称
  • 描述
  • 头像
  • partners_ids
  • last_message_id
  • owner_id
  • unread_messages_count

留言内容

  • ID
  • created_at
  • Updated_at
  • session_id
  • 文本
  • 发件人ID
  • receive_id
  • attachments_ids
  • read_ids
  • delivery_ids

用户数

  • ID
  • created_at
  • Updated_at
  • 登录
  • 全名
  • 头像

附件

  • ID
  • created_at
  • Updated_at
  • 类型
  • 链接

然后,所有用户将与您的服务器建立持久的Websocket连接,并将使用它来发送/接收消息。您的服务器会将所有消息存储在数据库的适当表中。

此外,您的服务器将提供REST API来检索对话,消息,附件,其他用户配置文件的列表。

我要说的是,此选项适用于小负载,少量用户(由于选择了技术(Node.js / Python / Ruby),并且还因为您将自己构建它,所以不确定您是否具有足够的实时应用程序构建经验)

  1. 使用一些开源的聊天服务器,例如EjabberdTigaseOpenfire。他们实际上已经实现了所有实时聊天功能,并具有良好的高负载能力(人们花了10年时间来构建它们)。您只需要将它们与App Server集成在一起即可。

您的App服务器可能会提供REST API,以检索对话,消息,附件和其他用户个人资料的列表。

聊天服务器将提供一种连接,发送/接收消息的方法。您还需要为所选的聊天服务器编写一个插件,该插件将跟踪所有消息并将其放入Server App DB中。

  1. 使用一些现成的Cloud Messaging平台。野外也有很多示例,例如TwillioConnectyCubeLayer等。

例如-ConnectyCube-具有消息传递功能,用户群,推送通知,视频通话,聊天机器人的消息传递和视频通话提供商。您可以将App Server及其REST API集成在一起。甚至根本不用编写自己的App Server并完全使用此平台。因此节省大量时间和金钱。

使用此类平台,您无需担心服务器托管,服务器监控,服务器正常运行时间以及其他与服务器相关的工作,而只需在应用程序中使用它们的API和SDK。通常,此类平台提供免费计划以及您拥有数据的专用企业解决方案(例如,数据部署在您自己的AWS账户上)。因此强烈推荐。

因此,这种情况在您的情况下是可能的。