你好我要实现一个社交聊天应用程序,我知道它是什么来满足一些requeriments但我不知道如何实现这一点。
需要:
问题出在后端设计中。我正在考虑带有websockets的Node.js或带有通道的Django,但我不知道哪个是存储聊天(如电报)的良好数据库设计,也不知道如何构建消息队列。
有人可以给我一些关于聊天应用程序设计的提示吗?谢谢
这是我的建议
你实际上有3个选择:
这实际上并不重要,你会使用Node.js Websockets,Django Channels或Rails Action Cable。它们将具有相同的性能(或者Node.js可能会更好一些)。你也可以使用任何数据库:MySQL,PostgreSQL或MongoDB。
例如,您可以拥有这些数据库表结构:
对话
消息
用户
附件
然后,您的所有用户将与您的服务器建立持久的websocket连接,并将使用它来发送/接收消息。您的服务器将在适当的表中将所有消息存储在DB中。
此外,您将提供REST API以检索对话,消息,附件和其他用户配置文件的列表。
我会说,这个选项适用于小负载,少量用户(因为选择的技术(Node.js / Python / Ruby),也因为你自己构建它,不确定你有足够的实时应用程序构建经验)
可能您的App服务器将提供REST API以检索对话,消息,附件和其他用户配置文件的列表。
聊天服务器将提供连接,发送/接收消息的方式。您还需要为选定的聊天服务器编写一个插件,该插件将跟踪所有消息并将它们放入您的Server App DB中。
例如 - ConnectyCube - 具有消息功能,用户群,推送通知,视频呼叫,聊天机器人的消息和视频呼叫提供商。您可以将App Server与其REST API集成。甚至根本不编写自己的App Server并完全使用这个平台。因此节省了大量的时间和金钱。
使用这样的平台,您不必关心服务器托管,服务器监视器,服务器正常运行时间以及其他与服务器相关的内容,您只需在应用程序中使用其API和SDK即可。大多数此类平台提供免费计划以及您拥有数据的专用企业解决方案(例如,它部署在您自己的AWS账户上)。所以强烈推荐。
因此,在您的情况下,这样的事情是可能的。
Here is a tutorial of AWS。它使用Node和Redis作为后端。
我按照教程编写了一个在线聊天应用程序,除了第一个应用程序之外,它满足了您的所有要求,因为我的应用程序只需要Web客户端。
顺便说一下,我使用Redis进行群集和DynamoDB来保存所有消息,因为我不太确定Amazon ElastiCache for Redis的可靠性。在我的测试中,Redis运行良好并且在3个月内没有丢失任何消息,但我的同事们坚持认为Redis不可靠(好吧,他们没有提供任何数据来证明这一点),因此我添加了DynamoDB以确保可靠性。