首页 > 解决方案 > 关于如何为聊天应用设计良好架构的建议?

问题描述

您好,我将实现一个社交聊天应用程序,以满足一些要求,但我不知道如何实现这一点。

必需的:

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

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

标签: node.jsdjangoreactjsreact-nativechat

解决方案


这是我的建议

您实际上有 3 个选择:

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

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

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

对话

  • ID
  • created_at
  • 更新时间
  • 类型
  • 姓名
  • 描述
  • 头像
  • 参与者ID
  • last_message_id
  • owner_id
  • unread_messages_count

留言

  • ID
  • created_at
  • 更新时间
  • 对话ID
  • 文本
  • 发件人ID
  • 收件人 ID
  • 附件 ID
  • read_ids
  • 交付的_ids

用户

  • ID
  • created_at
  • 更新时间
  • 登录
  • 全名
  • 头像

附件

  • ID
  • created_at
  • 更新时间
  • 类型
  • 关联

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

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

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

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

您的应用服务器可能会提供 REST API 来检索对话、消息、附件和其他用户配置文件的列表。

聊天服务器将提供一种连接、发送/接收消息的方式。您还需要为所选的聊天服务器编写一个插件,该插件将跟踪所有消息并将它们放入您的服务器应用程序数据库中。

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

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

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

因此,在您的情况下,类似的事情是可能的。


推荐阅读