关于如何为聊天应用设计好架构的建议?

问题描述 投票:2回答:2

你好我要实现一个社交聊天应用程序,我知道它是什么来满足一些requeriments但我不知道如何实现这一点。

需要:

  • 应用程序“前端”应该用React Native编写
  • 支持端到端加密
  • 支持用户进行用户聊天
  • OAuth2.0的
  • 推送通知
  • 历史
  • Django或Node后端

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

有人可以给我一些关于聊天应用程序设计的提示吗?谢谢

node.js django reactjs react-native chat
2个回答
4
投票

这是我的建议

你实际上有3个选择:

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

这实际上并不重要,你会使用Node.js Websockets,Django Channels或Rails Action Cable。它们将具有相同的性能(或者Node.js可能会更好一些)。你也可以使用任何数据库:MySQL,PostgreSQL或MongoDB。

例如,您可以拥有这些数据库表结构:

对话

  • ID
  • created_at
  • 的updated_at
  • 类型
  • 那么
  • 描述
  • 头像
  • 参与者ID
  • last_message_id
  • owner_id
  • unread_messages_count

消息

  • ID
  • created_at
  • 的updated_at
  • conversation_id
  • 文本
  • SENDER_ID
  • recipient_id
  • attachments_ids
  • read_ids
  • delivered_ids

用户

  • ID
  • created_at
  • 的updated_at
  • 登录
  • 全名
  • 头像

附件

  • ID
  • created_at
  • 的updated_at
  • 类型
  • 链接

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

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

我会说,这个选项适用于小负载,少量用户(因为选择的技术(Node.js / Python / Ruby),也因为你自己构建它,不确定你有足够的实时应用程序构建经验)

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

可能您的App服务器将提供REST API以检索对话,消息,附件和其他用户配置文件的列表。

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

  1. 使用一些准备好的云消息传递平台。在野外也有很多例子,例如TwillioConnectyCubeLayer等。

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

使用这样的平台,您不必关心服务器托管,服务器监视器,服务器正常运行时间以及其他与服务器相关的内容,您只需在应用程序中使用其API和SDK即可。大多数此类平台提供免费计划以及您拥有数据的专用企业解决方案(例如,它部署在您自己的AWS账户上)。所以强烈推荐。

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


0
投票

Here is a tutorial of AWS。它使用Node和Redis作为后端。

我按照教程编写了一个在线聊天应用程序,除了第一个应用程序之外,它满足了您的所有要求,因为我的应用程序只需要Web客户端。

顺便说一下,我使用Redis进行群集和DynamoDB来保存所有消息,因为我不太确定Amazon ElastiCache for Redis的可靠性。在我的测试中,Redis运行良好并且在3个月内没有丢失任何消息,但我的同事们坚持认为Redis不可靠(好吧,他们没有提供任何数据来证明这一点),因此我添加了DynamoDB以确保可靠性。

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